专栏首页FunTesterGroovy中的list
原创

Groovy中的list

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

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

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()`方法。





```Groovy
    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”首发,欢迎关注交流,禁止第三方转载。

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Groovy中的list

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

    FunTester
  • 泛型类的正确用法

    在准备下次直播Java基础的内容中,偶然看到Java泛型这个知识点,突然有了点想法,之前一直纠结的一个问题有了解答的思路。

    FunTester
  • window系统权限不足导致gradle构建失败的解决办法

    本人在使用window搭建环境的过程中遇到了一个gradle构建失败的的问题,困扰了很久,具体构建报错提示如何:

    FunTester
  • Groovy中的list

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

    FunTester
  • Tika结合Tesseract-OCR 实现光学汉字识别(简体、宋体的识别率百分之百)—附Java源码、测试数据和训练集下载地址

     OCR(Optical character recognition) —— 光学字符识别,是图像处理的一个重要分支,中文的识别具有一定挑战性,特别是手写体和草...

    NaughtyCat
  • Vue 3 创建应用实例

    本章节主要是对 Vue 应用实例的讲解,我们都知道在 Vue 2.x 是通过 new Vue() 来创建 Vue 应用的,但是在 Vue 3.0 中不是这样的,...

    公众号---志学Python
  • 领域驱动设计-软件中的对象

    软件中的对象 About DOMAIN-DRIVEN DESIGN 领域驱动设计是一种思维方式,目的在于处理具有复杂问题的软件项目。在传统的瀑布软件开发模型中,...

    知然
  • 迄今为止把同步/异步/阻塞/非阻塞/BIO/NIO/AIO讲的这么清楚的好文章

    常规的误区 假设有一个展示用户详情的需求,分两步,先调用一个HTTP接口拿到详情数据,然后使用适合的视图展示详情数据。 如果网速很慢,代码发起一个HTTP...

    Java团长
  • Java NIO之理解I/O模型

    自己以前在Java NIO这块儿,一直都是比较薄弱的,以前还因为这点知识而错失了一个机会。所以最近打算好好学习一下这部分内容,我想应该也会有朋友像我一样,一直想...

    纪莫
  • 如何设置Fiddler来拦截Java代码发送的HTTP请求,进行各种问题排查

    我们使用Java的RestTemplate或者Apache的HTTPClient编程的时候,经常遇到需要跟踪Java 代码发送的HTTP请求明细的情况。和ja...

    Jerry Wang

扫码关注云+社区

领取腾讯云代金券