Groovy集合遍历 ( 使用集合的 reverseEach 方法进行遍历 | 倒序集合迭代器 ReverseListIterator 类简介 | 代码示例 )
Posted 韩曙亮
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Groovy集合遍历 ( 使用集合的 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]
以上是关于Groovy集合遍历 ( 使用集合的 reverseEach 方法进行遍历 | 倒序集合迭代器 ReverseListIterator 类简介 | 代码示例 )的主要内容,如果未能解决你的问题,请参考以下文章
Groovy集合遍历 ( 使用集合的 collect 循环遍历集合并根据指定闭包规则生成新集合 | 代码示例 )
Groovy集合遍历 ( 使用集合的 reverseEach 方法进行遍历 | 倒序集合迭代器 ReverseListIterator 类简介 | 代码示例 )
Groovy集合遍历 ( 使用集合的 findAll 方法查找集合中符合匹配条件的所有元素 | 代码示例 )
Groovy集合遍历 ( 使用集合的 findAll 方法查找集合中符合匹配条件的所有元素 | 代码示例 )