在上一期从Java到Groovy的八级进化论​中,我分享了​​Java​​​是如何转变成​​Groovy​​​。今天,我将分享学习​​Groovy​​​对​​list​​​的语法支持。以下Java类也是有效的​​Groovy​​类。其目的是过滤名称列表,以删除超过三个字符的名称。我们将创建一个名称列表,我们将调用一个负责过滤的实用程序方法,并打印结果。

package com.fun

import com.fun.frame.httpclient.FanLibrary
import org.slf4j.Logger

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.Logger

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()一起使用,不如将其转换为脚本,并且还将放弃静态类型信息:

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
assert names[1] == "Fred"
names[1] = "Frederic"

​Groovy​​​还在列表上添加了一些有用的方法,以简化列表活动,例如枚举元素。​​Groovy​​​通过“装饰”核心JDK类来做到这一点。列表上添加了两个方便的方法,它们是用于遍历所有元素的​​each()​​​方法,以及用于查找符合某个条件的所有元素的​​findAll()​​方法。

        println names.any {
it.length() > 3
}

println names.every {
it.length() > 3
}

println names.find {
it.length() > 3
}

println names.findAll() {
it.length() > 2
}

  • 郑重声明:“FunTester”首发,欢迎关注交流,禁止第三方转载。

技术类文章精选

无代码文章精选

Groovy中的list_测试用例