java - 使用流遍历列表时如何获取元素索引?

标签 java android lambda java-8 java-stream

我想在使用 lambda 遍历列表时获取索引。

例如:

List<CheckBox> checkBoxes = null;

checkBoxes.forEach(checkBox -> {
      if (checkBox.isSelected()) {
          sb.append("index"); //I want to get checkbox index here
          sb.append(",");
      }
});

编辑:checkBoxes = null; 只是一个占位符,但一旦我开始编写一些代码就会被正确使用。

最佳答案

这是我的做法。

在列表的索引上运行一个IntStream。然后根据相应的复选框是否被选中来过滤索引。然后将索引值int 映射到索引值的String 表示中。最后,将字符串收集到结果字符串中,以逗号分隔。

代码:

    String result = IntStream.range(0, checkBoxes.size())
                             .filter(i -> checkBoxes.get(i).isSelected())
                             .mapToObj(String::valueOf)
                             .collect(Collectors.joining(","));

输出会是这样的

    0,1,3,6

取决于实际选中的复选框。

我会避免使用 forEach,因为您可以通过转换值而不是执行副作用来实现目标。我也会避免 List.indexOf 因为它会线性搜索列表以查找所需的项目。如果您只有几个复选框,这没什么大不了的,但如果您有很多,O(N^2) 的增长将导致性能受到影响。

关于java - 使用流遍历列表时如何获取元素索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43750768/

相关文章:

java - 如何调试远程机器上的 war 文件?

java - ElasticSearch 2.0 Java API 聚合过滤器与 query_string

android - 如何在Androidx上使用Picasso库

Python 闭包没有按预期工作

c++ - 使用仿函数或 lambda 的 vector 深度复制

java - 当我从另一个 Activity 中删除元素时,如何清除一个 Activity 的数组列表?

Java Swing - 如何在任何 JOptionPane 之前发出蜂鸣声?

mochahost vps 404错误上的Java Websocket聊天

Android Room 编译时警告关于外键中的列不是索引的一部分。这是什么意思?

c# - Linq,lambda 表达式