代码之家  ›  专栏  ›  技术社区  ›  k13i

在vavr中用索引遍历列表

  •  1
  • k13i  · 技术社区  · 6 年前

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

    我怎样才能做到这一点 虚拟现实 ?

    2 回复  |  直到 6 年前
        1
  •  3
  •   Daniel Dietrich    6 年前

    Vavr有一个类似Scala的API。Vavr集合(aka 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解决方案,特别是在所有信息(元素和索引)都已就绪的情况下。我喜欢添加新方法的想法 forEachWithIndex 对Vavr的收藏来说就像是在Kotlin。

    更新: 我们可以补充 forEachWithIndex(ObjIntConsumer<? super T>) 去Vavr's Traversable . 它不仅仅是 iterator().zipWithIndex().forEach(Consumer<Tuple2<T, Integer>>) 因为它不会创造 Tuple2 迭代期间的实例。

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

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

        2
  •  0
  •   jokster    6 年前

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