我有下面的代码返回了ConcurrentModificationException。我可以看到一些在java7中处理相同问题的方法。相反,在Java 8中处理相同内容的最佳方法是什么
List<String> mylist = new ArrayList<>();
mylist.add("test");
mylist.forEach(str -> {
if(str.equalsIgnoreCase("test"))
{
mylist.add("pass");
}
});
答案 0 :(得分:0)
我想说,避免这种情况的最好方法是避免在迭代过程中操纵集合。
你可以
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");
}