1

我正在使用来自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

4

3 回答 3

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)
);

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

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

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

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

于 2018-08-03T22:18:16.797 回答
0

如果要访问索引,只需使用普通的 for 循环和List.get(ix).

于 2018-08-03T09:04:51.427 回答
0

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

   Figure figure = new Rectangle();    

   foreach(listRectangles, (int w, int h) -> {
      System.out.println("square: " + (w * h));
   });      
于 2020-05-30T14:22:27.027 回答