我正在使用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
中实现这一目标?
答案 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));
});