【Groovy】集合遍历 ( 使用集合的 reverseEach 方法进行遍历 | 倒序集合迭代器 ReverseListIterator 类简介 | 代码示例 )

简介: 【Groovy】集合遍历 ( 使用集合的 reverseEach 方法进行遍历 | 倒序集合迭代器 ReverseListIterator 类简介 | 代码示例 )

文章目录

一、使用集合的 reverseEach 方法进行倒序遍历

二、倒序集合迭代器 ReverseListIterator 类简介

三、代码示例





一、使用集合的 reverseEach 方法进行倒序遍历


使用集合的 reverseEach 方法进行倒序遍历 , 传入一个闭包作为参数 , 在该方法中 , 又调用了 each 方法进行遍历 , 只是传入的参数是 倒序迭代器 ;


 

/**
     * 按相反顺序迭代列表中的每个元素.
     * <pre class="groovyTestCase">def result = []
     * [1,2,3].reverseEach { result << it }
     * assert result == [3,2,1]</pre>
     *
     * @param self    一个 List 集合
     * @param closure 每个项传递到的闭包.
     * @return 原始集合
     * @since 1.5.0
     */
    public static <T> List<T> reverseEach(List<T> self, @ClosureParams(FirstParam.FirstGenericType.class) Closure closure) {
        each(new ReverseListIterator<T>(self), closure);
        return self;
    }


在 reverseEach 方法中 , 调用了 each 遍历方法 , 传入 倒序集合迭代器 ReverseListIterator 实例对象 和 闭包 作为参数 , 倒序遍历集合 ;


 

private static <T> Iterator<T> each(Iterator<T> iter, Closure closure) {
        while (iter.hasNext()) {
            Object arg = iter.next();
            closure.call(arg);
        }
        return iter;
    }






二、倒序集合迭代器 ReverseListIterator 类简介


上述对集合进行方向遍历 , 核心就是 倒序列表集合迭代器 ReverseListIterator 类 , 通过构造该实例对象 , 传入 each 方法 , 即可实现反向遍历 ;



在 ReverseListIterator 构造方法中 , 执行


this.delegate = list.listIterator(list.size());


代码 , 将 delegate 成员设置为最后一个元素 , 从该元素开始遍历 ;



判断是否有下一个元素时 , 调用


delegate.hasPrevious();


判断当前遍历元素是否有前一个元素 ;



同理 , 调用 next 方法获取下一个元素时 , 执行


delegate.previous()


获取集合中的上一个元素 ;



倒序遍历迭代器原型 :


/**
 * 列表上的反向迭代器。利用{@link ListIterator}
 * 从提供的{@link List}中获取,并将其转换为
 * {@link Iterator}有效地遍历中的<code>列表</code>
 * 相反。此迭代器的fail-fast语义与
 * 基础<code>ListIterator</code>的语义。
 * 
 * @author Mike Dillon
 */
public class ReverseListIterator<T> implements Iterator<T> {
    private ListIterator<T> delegate;
    /**
     * 为提供的列表构造一个新的<code>反向缝合器</code>。
     * @param list 要反向迭代的列表
     */
    public ReverseListIterator(List<T> list) {
        this.delegate = list.listIterator(list.size());
    }
    /**
     * {@inheritDoc}
     */
    public boolean hasNext() {
        return delegate.hasPrevious();
    }
    /**
     * {@inheritDoc}
     */
    public T next() {
        return delegate.previous();
    }
    /**
     * {@inheritDoc}
     */
    public void remove() {
        delegate.remove();
    }
}




三、代码示例


代码示例 :

class Test {
    static void main(args) {
        // 为 ArrayList 设置初始值
        def list = ["1", "2", "3"]
        // I. 使用 reverseEach  遍历集合
        def list3 = list.reverseEach{
            // 字符串乘法就是将元素进行叠加
            it * 2
        }
        // 打印 [1, 2, 3]
        println list
        // 打印 [1, 2, 3]
        println list3
    }
}


执行结果 :


[1, 2, 3]
[1, 2, 3]


image.png

image.png

目录
相关文章
|
3月前
集合中常见方法及遍历方式
集合中常见方法及遍历方式
31 1
|
3月前
|
存储 Java
Java学习笔记 List集合的定义、集合的遍历、迭代器的使用
Java学习笔记 List集合的定义、集合的遍历、迭代器的使用
|
5月前
|
索引
List集合(方法简介,集合遍历)
List集合(方法简介,集合遍历)
|
3月前
|
Java 容器
07 Java数组与数组操作(定义+遍历+排序+增删改查)(上)
07 Java数组与数组操作(定义+遍历+排序+增删改查)
53 8
|
3月前
|
存储 Java API
07 Java数组与数组操作(定义+遍历+排序+增删改查)(下)
07 Java数组与数组操作(定义+遍历+排序+增删改查)
41 4
|
5月前
(Collection)集合遍历,进阶
(Collection)集合遍历,进阶
|
5月前
|
存储 Java
JavaSE——集合框架一(2/7)-Collection集合的遍历方式-迭代器、增强for循环、Lambda、案例
JavaSE——集合框架一(2/7)-Collection集合的遍历方式-迭代器、增强for循环、Lambda、案例
43 1
|
6月前
|
存储 算法 Java
Java数组与集合的深入解析
Java数组与集合的深入解析
54 0
13.从入门到精通:Python 集合 集合的基本操作 1、添加元素 2、移除元素 3、计算集合元素个数 4、清空集合 5、判断元素是否在集合中存在 集合内置方法完整列表
13.从入门到精通:Python 集合 集合的基本操作 1、添加元素 2、移除元素 3、计算集合元素个数 4、清空集合 5、判断元素是否在集合中存在 集合内置方法完整列表
|
存储 Java 索引
【Java】集合与数组关系,认识集合,使用集合,集合使用判断情况
【Java】集合与数组关系,认识集合,使用集合,集合使用判断情况
10746 0
下一篇
无影云桌面