当前位置: 首页 > 知识库问答 >
问题:

在Java 8中有没有一种简单的方法来迭代一个带有索引的流?

史旺
2023-03-14

有没有一种简单的方法可以在访问流中的索引的同时对流进行迭代?

String[] names = {"Sam","Pamela", "Dave", "Pascal", "Erik"};

List<String> nameList;
Stream<Integer> indices = intRange(1, names.length).boxed();
nameList = zip(indices, stream(names), SimpleEntry::new)
        .filter(e -> e.getValue().length() <= e.getKey())
        .map(Entry::getValue)
        .collect(toList());

这与上面给出的LINQ示例相比似乎相当令人失望

string[] names = { "Sam", "Pamela", "Dave", "Pascal", "Erik" };
var nameList = names.Where((c, index) => c.Length <= index + 1).ToList();

有没有更简洁的方式?

而且,拉链似乎不是动了就是被拆了...

共有1个答案

谢英光
2023-03-14

最干净的方法是从索引流开始:

String[] names = {"Sam", "Pamela", "Dave", "Pascal", "Erik"};
IntStream.range(0, names.length)
         .filter(i -> names[i].length() <= i)
         .mapToObj(i -> names[i])
         .collect(Collectors.toList());

结果列表只包含“Erik”。

当您习惯于for循环时,一个看起来更熟悉的替代方法是使用可变对象(例如AtomicInteger)维护一个临时计数器:

String[] names = {"Sam", "Pamela", "Dave", "Pascal", "Erik"};
AtomicInteger index = new AtomicInteger();
List<String> list = Arrays.stream(names)
                          .filter(n -> n.length() <= index.incrementAndGet())
                          .collect(Collectors.toList());

请注意,在并行流上使用后一种方法可能会中断,因为项不需要“按顺序”处理。

 类似资料:
  • 问题内容: 在访问流中的索引时,是否有一种简洁的方法可以在流上进行迭代? 与此处给出的LINQ示例相比,这似乎令人失望 有没有更简洁的方法? 此外,似乎拉链已移动或已被移除… 问题答案: 最干净的方法是从索引流开始: 结果列表仅包含“ Erik”。 当你习惯于循环时,一种看起来更熟悉的替代方法是使用可变对象维护临时计数器,例如: 注意,在并行流上使用后一种方法可能会中断,因为不必“按顺序”处理项目

  • Go的范围可以在地图和切片上迭代,但我想知道是否有一种方法可以在一系列数字上迭代,比如: 或者有没有一种方法来表示Go中的整数范围,就像Ruby对类范围所做的那样?

  • 问题内容: 我非常喜欢Visual Studio在完成已编写的代码和所引用的ALSO代码(各种库/程序集)时为您提供注释文档/参数名称的方式。 在完成代码或将方法悬停在方法上时,是否有一种简单的方法可以在Eclipse中获取内联javadoc /参数名称?通过插件?通过某些设置?使用大量的库(就像在Java中经常发生的那样)然后当您将其放在源jar中时,必须去网站或本地javadoc位置查找信息,

  • 问题内容: 我正在建立一个带有flask的网站,其中用户具有帐户并能够登录。我正在使用flask-principal作为登录部分和角色管理。有没有办法让用户的会话在5分钟或10分钟后过期?我在flask文档或flask-principal文档中找不到该文件。 我想到了一种手动方法,在登录时在服务器端设置一个带有时间标签的变量,并在用户执行下一个操作时,服务器会验证该时间戳记上的时间增量并删除会话。

  • 我做这个迭代是为了对DataFrame的每个值执行不同的函数: 作为xxx一个2列数据帧

  • 本文向大家介绍Java 8中迭代带有索引的流(Stream),包括了Java 8中迭代带有索引的流(Stream)的使用技巧和注意事项,需要的朋友参考一下 要在Java 8中迭代带有索引的流,代码如下- 示例 输出结果 名为Demo的类包含主要功能。 在此主要函数中,声明了一个字符串类型的数组,并使用AtomicInteger类创建了AtomicInteger实例。  “ getAndIncrem