使用 vavr 中的索引迭代列表

k13*_*13i 1 java collections foreach lambda vavr

我正在使用vavr库中的集合。我有一个像这样定义的元素列表:

List<Integer> integers = List.of(1, 2, 3);
Run Code Online (Sandbox Code Playgroud)

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

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

我怎样才能做到这一点vavr?

Dan*_*ich 6

Vavr 有一个类似于 Scala 的 API。Vavr 集合(又名 traversables)有一个方法叫做zipWithIndex(). 它返回一个新的集合,它由元素和索引的元组组成。

此外,使用迭代器为我们节省了新的集合实例。

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

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

但是,我发现创建新集合的效率不如 Kotlin 解决方案,尤其是当所有信息(元素和索引)都已准备就绪时。我喜欢在forEachWithIndexVavr 的集合中添加一个新方法的想法,就像在 Kotlin 中一样。

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

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

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