前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Groovy中的list

Groovy中的list

原创
作者头像
FunTester
修改2020-04-15 10:35:37
1.3K0
修改2020-04-15 10:35:37
举报
文章被收录于专栏:FunTester

在上一期从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”首发,欢迎关注交流,禁止第三方转载。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档