Groovy中的list

2020-04-15 10:35:37 浏览数 (1)

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

以下Java类也是有效的Groovy类。其目的是过滤名称列表,以删除超过三个字符的名称。我们将创建一个名称列表,我们将调用一个负责过滤的实用程序方法,并打印结果。

代码语言:txt复制
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该程序。

代码语言:txt复制
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”首发,欢迎关注交流,禁止第三方转载。

0 人点赞