在上一期从Java到Groovy的八级进化论中,我分享了Java
是如何转变成Groovy
。今天,我将分享学习Groovy
对list
的语法支持。
以下Java类也是有效的Groovy
类。其目的是过滤名称列表,以删除超过三个字符的名称。我们将创建一个名称列表,我们将调用一个负责过滤的实用程序方法,并打印结果。
package com.fun
import com.fun.frame.httpclient.FanLibrary
import org.slf4j.Logge
class TSSS extends FanLibrary {
public static Logger logger = getLogger(TSSS.class)
public static void main(String[] args) {
List names = new ArrayList();
names.add("Ted");
names.add("Fred");
names.add("Jed");
names.add("Ned");
List shortNames = filter(names, 3);
output(shortNames.size());
for (Iterator i = shortNames.iterator(); i.hasNext();) {
String s = (String) i.next();
output(s);
}
}
public static List filter(List strings, int length) {
List result = new ArrayList();
for (String str : strings) {
if (str.length() < length 1) {
result.add(str);
}
}
return result;
}
}
我们当然可以通过使用Arrays#asList()
方法来保存一些行来改进此Java
示例。我将再次使用与上一篇文章相同的路径来groovyfy
该程序。
package com.fun
import com.fun.frame.httpclient.FanLibrary
import org.slf4j.Logge
class TSSS extends FanLibrary {
public static Logger logger = getLogger(TSSS.class)
public static void main(String[] args) {
List names = new ArrayList()
names.add("Ted")
names.add("Fred")
names.add("Jed")
names.add("Ned")
List shortNames = filter(names, 3)
output shortNames.size()
for (String s : shortNames) {
output s
}
}
public static List filter(List strings, int length) {
List result = new ArrayList()
for (String str : strings) {
if (str.length() < length 1) {
result.add(str)
}
}
return result
}
}
与其将类与方法main()一起使用,不如将其转换为脚本,并且还将放弃静态类型信息:
代码语言:txt复制List names = new ArrayList()
names.add("Ted")
names.add("Fred")
names.add("Jed")
names.add("Ned")
List shortNames = filter(names, 3)
println shortNames.size()
for (String s : shortNames) {
println s
}
def filter(List strings, int length) {
List result = new ArrayList()
for (String str : strings) {
if (str.length() < length 1) {
result.add(str)
}
}
return result
}```
无需创建类的实例,我们只需调用`filter()`方法。到目前为止,这些小变化并不是真正的新事物,因为我们之前已经遵循了这些步骤。现在,我们要发现的是,借助`Groovy`列表的本机语法,如何使列表更加友好。那么我们如何定义一个新列表?
`def names = []`
而且,我们可以一次填充一个元素,而不是一次在列表中添加一个元素:
`def names = ["Ted", "Fred", "Jed", "Ned"]`
可以使用下标运算符设置和访问元素:
```Python
代码语言:txt复制 assert names[1] == "Fred"
代码语言:txt复制 names[1] = "Frederic"
代码语言:txt复制`Groovy`还在列表上添加了一些有用的方法,以简化列表活动,例如枚举元素。`Groovy`通过“装饰”核心JDK类来做到这一点。列表上添加了两个方便的方法,它们是用于遍历所有元素的`each()`方法,以及用于查找符合某个条件的所有元素的`findAll()`方法。
```Groovy
代码语言:txt复制 println names.any {
代码语言:txt复制 it.length() > 3
代码语言:txt复制 }
代码语言:txt复制 println names.every {
代码语言:txt复制 it.length() > 3
代码语言:txt复制 }
代码语言:txt复制 println names.find {
代码语言:txt复制 it.length() > 3
代码语言:txt复制 }
代码语言:txt复制 println names.findAll() {
代码语言:txt复制 it.length() > 2
代码语言:txt复制 }
代码语言:txt复制
* **郑重声明**:“FunTester”首发,欢迎关注交流,禁止第三方转载。