我正在使用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()的方法。它返回一个新集合,该集合由元素和索引的元组组成。

此外,使用Iterator可以为我们节省新的集合实例。

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

integers.iterator().zipWithIndex().forEach(t ->
    System.out.println("index = " + t._1 + " element = " + t._2)
);


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

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

更新:我只是added forEachWithIndex对Vavr。它将包含在下一个版本中。

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

关于java - 在vavr中使用索引遍历列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51667201/

10-11 10:48