我想在使用 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/