用vavr中的索引遍历列表



我使用的是来自vavr库的集合。我有一个定义如下的元素列表:

List<Integer> integers = List.of(1, 2, 3);

如何迭代列表中的元素并同时访问索引?Groovy中有一个方法eachWithIndex。我正在vavr中寻找类似的东西。我想这样使用它:

integers.eachWithIndex((int element, int index) -> {
System.out.println("index = " + index + " element = " + element);
})

如何在vavr中实现这一点?

Vavr有一个类似Scala的API。Vavr集合(又称可遍历集合(有一个名为zipWithIndex()的方法。它返回一个新的集合,该集合由元素和索引的元组组成。

此外,使用迭代器可以为我们保存新的集合实例。

final List<Integer> integers = List.of(1, 2, 3);
integers.iterator().zipWithIndex().forEach(t ->
System.out.println("index = " + t._1 + " element = " + t._2)
);

然而,我发现创建一个新的集合不如Kotlin解决方案有效,尤其是当所有信息(元素和索引(都已经到位时。我喜欢在Vavr的集合中添加一个新方法forEachWithIndex的想法,它的作用就像在Kotlin中一样

更新:我们可以将forEachWithIndex(ObjIntConsumer<? super T>)添加到Vavr的Traversable中。它不仅仅是iterator().zipWithIndex().forEach(Consumer<Tuple2<T, Integer>>)的快捷方式,因为它在迭代过程中不会创建Tuple2实例。

更新:我刚刚在Vavr中添加了forEachWithIndex。它将包含在下一个版本中。

免责声明:我是Vavr的创建者

如果您想访问索引,只需对循环和List.get(ix)使用normal即可。

JMPL是一个简单的java库,它可以使用java 8特性来模拟一些特性模式匹配。这个库还支持简单的迭代集合。

Figure figure = new Rectangle();    
foreach(listRectangles, (int w, int h) -> {
System.out.println("square: " + (w * h));
});      

最新更新