在lambda foreach表达式java 8中获取索引

时间:2017-07-18 16:29:48

标签: java arraylist lambda foreach java-8

我想从某个过滤器上的列表中删除对象,并且有多个对象。

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);
});

3 个答案:

答案 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);
});