在vavr中使用索引遍历列表

时间:2018-08-03 07:16:26

标签: java lambda collections foreach 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中实现这一目标?

3 个答案:

答案 0 :(得分:3)

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

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

ProcessId

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

更新:我们可以将final List<Integer> integers = List.of(1, 2, 3); integers.iterator().zipWithIndex().forEach(t -> System.out.println("index = " + t._1 + " element = " + t._2) ); 添加到Vavr的forEachWithIndex中。它不仅是forEachWithIndex(ObjIntConsumer<? super T>)的快捷方式,因为它不会在迭代过程中创建Traversable实例。

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

JMPL是一个简单的Java库,可以使用Java 8功能来模拟某些功能模式匹配。 该库还支持简单的遍历集合。

   Figure figure = new Rectangle();    

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