【Groovy】集合遍历 ( 使用集合的 collect 循环遍历集合并根据指定闭包规则生成新集合 | 代码示例 )

简介: 【Groovy】集合遍历 ( 使用集合的 collect 循环遍历集合并根据指定闭包规则生成新集合 | 代码示例 )

文章目录

一、使用集合的 collect 循环遍历集合并根据指定闭包规则生成新集合

二、代码示例





一、使用集合的 collect 循环遍历集合并根据指定闭包规则生成新集合


调用集合的 collect 方法进行遍历 , 与 调用 each 方法进行遍历 , 实现的功能是不同的 ;


collect 方法主要是 根据 一定的转换规则 , 将 现有的 集合 , 转换为一个新的集合 ;


新集合是 重新创建的集合 , 与原集合无关 ;



分析集合的 collect 方法 , 其传入的的参数是一个闭包 transform , 这是 新生成集合的规则 ;


在该函数中调用了 collect 重载函数 collect(self, new ArrayList<T>(self.size()), transform) , 传入了新的 ArrayList 集合作为参数 , 该 新的 ArrayList 集合是新创建的集合 , 其大小等于被遍历的集合 ;


 

/**
     * 使用<code>transform</code>闭包遍历此集合,将每个条目转换为新值
     * 返回已转换值的列表。
     * <pre class="groovyTestCase">assert [2,4,6] == [1,2,3].collect { it * 2 }</pre>
     *
     * @param self      一个集合
     * @param transform 用于转换集合中每个项的闭包
     * @return 转换值的列表
     * @since 1.0
     */
    public static <S,T> List<T> collect(Collection<S> self, @ClosureParams(FirstParam.FirstGenericType.class) Closure<T> transform) {
        return (List<T>) collect(self, new ArrayList<T>(self.size()), transform);
    }



在 重载的 collect 方法中 , 为新创建的集合赋值 , 根据 transform 闭包逻辑 和 原集合的值 , 计算 新集合中对应位置元素的值 ;


/**
     * 方法遍历此集合,将每个值转换为新值 <code>transform</code> 闭包
     * 并将其添加到所提供的 <code>collector</code> 中.
     * <pre class="groovyTestCase">assert [1,2,3] as HashSet == [2,4,5,6].collect(new HashSet()) { (int)(it / 2) }</pre>
     *
     * @param self      一个集合
     * @param collector 将转换值添加到其中的集合
     * @param transform 用于转换集合中的每一项的闭包
     * @return 将所有转换后的值添加到其上的收集器
     * @since 1.0
     */
    public static <T,E> Collection<T> collect(Collection<E> self, Collection<T> collector, @ClosureParams(FirstParam.FirstGenericType.class) Closure<? extends T> transform) {
        for (Object item : self) {
            collector.add(transform.call(item));
            if (transform.getDirective() == Closure.DONE) {
                break;
            }
        }
        return collector;
    }






二、代码示例


代码示例 :


class Test {
    static void main(args) {
        // 为 ArrayList 设置初始值
        def list = ["1", "2", "3"]
        // I. 使用 collate 遍历集合 , 返回一个新集合 , 集合的元素可以在闭包中计算得来
        def list3 = list.collect{
            // 字符串乘法就是将元素进行叠加
            it * 2
        }
        // 打印 [1, 2, 3]
        println list
        // 打印 [11, 22, 33]
        println list3
    }
}


执行结果 :


[1, 2, 3]
[11, 22, 33]

image.png

目录
相关文章
C# 找出泛型集合中的满足一定条件的元素 List.Wher()
在学习的过程中,发现泛型集合List有一个Where函数可以筛选出满足一定条件的元素,结合Lambda表达式使用特别方便,写出来与大家分享。 1.关于Func Func是一种有任意个输入参数,有一个返回值的委托,在使用的过程中,Func,前n-1个是输入参数类型,第N个是输出参数类型。
2014 0
|
6月前
|
Python
python之集合的创建与使用,遍历,集合常见的操作函数,集合与列表,元组,字典的嵌套
python之集合的创建与使用,遍历,集合常见的操作函数,集合与列表,元组,字典的嵌套
|
8月前
|
Java
2.3 Lambda表达式在集合操作中的应用:对集合元素进行映射和转换
2.3 Lambda表达式在集合操作中的应用:对集合元素进行映射和转换
88 0
|
9月前
1.1 集合与函数
1.1 集合与函数
57 0
|
10月前
|
Python
13.从入门到精通:Python 集合 集合的基本操作 1、添加元素 2、移除元素 3、计算集合元素个数 4、清空集合 5、判断元素是否在集合中存在 集合内置方法完整列表
13.从入门到精通:Python 集合 集合的基本操作 1、添加元素 2、移除元素 3、计算集合元素个数 4、清空集合 5、判断元素是否在集合中存在 集合内置方法完整列表
【Groovy】集合遍历 ( 使用 for 循环遍历集合 | 使用集合的 each 方法遍历集合 | 集合的 each 方法返回值分析 )
【Groovy】集合遍历 ( 使用 for 循环遍历集合 | 使用集合的 each 方法遍历集合 | 集合的 each 方法返回值分析 )
1284 0
【Groovy】集合遍历 ( 使用 for 循环遍历集合 | 使用集合的 each 方法遍历集合 | 集合的 each 方法返回值分析 )
|
索引
【Groovy】集合遍历 ( 使用集合的 eachWithIndex 方法进行遍历 | 代码示例 )
【Groovy】集合遍历 ( 使用集合的 eachWithIndex 方法进行遍历 | 代码示例 )
320 0
【Groovy】集合遍历 ( 使用集合的 eachWithIndex 方法进行遍历 | 代码示例 )
【Groovy】集合遍历 ( 集合中有集合元素时调用 flatten 函数拉平集合元素 | 代码示例 )
【Groovy】集合遍历 ( 集合中有集合元素时调用 flatten 函数拉平集合元素 | 代码示例 )
138 0
【Groovy】集合遍历 ( 集合中有集合元素时调用 flatten 函数拉平集合元素 | 代码示例 )
【Groovy】集合遍历 ( 使用集合的 reverseEach 方法进行遍历 | 倒序集合迭代器 ReverseListIterator 类简介 | 代码示例 )
【Groovy】集合遍历 ( 使用集合的 reverseEach 方法进行遍历 | 倒序集合迭代器 ReverseListIterator 类简介 | 代码示例 )
289 0
【Groovy】集合遍历 ( 使用集合的 reverseEach 方法进行遍历 | 倒序集合迭代器 ReverseListIterator 类简介 | 代码示例 )
【Groovy】集合遍历 ( 调用集合的 any 函数判定集合中是否有指定匹配规则的元素 | 代码示例 )
【Groovy】集合遍历 ( 调用集合的 any 函数判定集合中是否有指定匹配规则的元素 | 代码示例 )
165 0
【Groovy】集合遍历 ( 调用集合的 any 函数判定集合中是否有指定匹配规则的元素 | 代码示例 )