在上一期从 Java 到 Groovy 的八级进化论中,我分享了Java是如何转变成Groovy。今天,我将分享学习Groovylist的语法支持。

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

```Java Python

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"]

可以使用下标运算符设置和访问元素:

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
}

技术类文章精选

无代码文章精选


↙↙↙阅读原文可查看相关链接,并与作者交流