我想在遍历列表使用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)的增长将导致性能下降。