我想从某个过滤器上的列表中删除对象,并且有多个对象。
list.stream().filter(g->g.getName().equalsIgnoreCase("String")).forEach(result ->{
/* is it possible to get the index of the result here?
.remove(), will iterate through the list again. I don't want that.
*/
list.remove(result);
});
答案 0 :(得分:7)
此时无法获取索引,但无论如何都不支持修改流式传输的list
。您尝试时可能会获得ConcurrentModificationException
。
使用专用API执行此操作:
list.removeIf(g -> g.getName().equalsIgnoreCase("String"));
另一种方法是将要保留的元素收集到新的List
:
List<String> result = list.stream()
.filter(g -> !g.getName().equalsIgnoreCase("String"))
.collect(Collectors.toList());
答案 1 :(得分:4)
您可以改为使用Collection#removeIf,例如:
list.removeIf(g -> g.getName().equalsIgnoreCase("String"));
答案 2 :(得分:0)
对不起,如果无法帮到你
list.stream().filter(g->g.getName().equalsIgnoreCase("String")).forEach(result ->{
list.indexOf(result);
});