我有下面的一段代码,它返回 ConcurrentModificationException。我可以看到一些在 java7 中处理相同问题的方法。相反,在 Java 8 中处理相同问题的最佳方法是什么
List<String> mylist = new ArrayList<>();
mylist.add("test");
mylist.forEach(str -> {
if(str.equalsIgnoreCase("test"))
{
mylist.add("pass");
}
});
我想说避免它的最佳方法是避免在迭代时操作集合。
你可以做
if (myList.stream()
.filter(s -> "test".equalsIgnoreCase(s))
.findFirst()
.isPresent()) {
myList.add("pass");
}
或者更简单,正如 Ole 指出的那样
if (myList.stream()
.anyMatch("test"::equalsIgnoreCase)) {
myList.add("pass");
}
编辑:哎呀,纳曼是对的,你想添加尽可能多的“传球”匹配,所以
long matches = list.stream()
.filter("test"::equalsIgnoreCase)
.collect(Collectors.counting());
for (long i = 0; i < matches; i++) {
list.add("pass");
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句