过滤后从原始列表中删除元素

时间:2016-03-01 08:25:18

标签: java java-8

例如,在C#中我可以从原始列表中选择元素:

result

如果我从first_mas删除元素,同样的元素也会从List<String> result = first_mas.stream().filter(d -> d.equals("1")).collect(Collectors.toList()); 中删除。

在Java中,我可以这样做:

result

但如果我从public void doSomething(List<String> list){ // here remove something from list, should also be removed from original list // i don't have link to original list here } doSomething(first_mas.stream().filter(d -> d.get(0).equals("1")).collect(Collectors.toList())); 删除元素,则不会从原始数组中删除它们。

过滤后是否可以从原始列表中删除元素?

UPD:

{{1}}

3 个答案:

答案 0 :(得分:3)

你可以试试这个:

List<String> original;
original.removeAll(result);

获得结果后,您可以轻松删除结果List

中的所有元素

答案 1 :(得分:0)

可能我不太清楚你的问题,但为什么你不能把这个列表传递给doSomething然后用Lambdas来操纵它?

这样的事情:

public static void main(String[] args) {
    List<String> l = new ArrayList<>();
    l.add("a");
    l.add("b");
    System.out.println(l.size());
    doSomething(l);
    System.out.println(l.size());
}

private static void doSomething(List<String> l) {
    l.stream().filter(s -> s.equals("a")).findFirst().map(l::remove);
}

答案 2 :(得分:0)

您应该使用Collection.removeIf(predicate)方法。

根据文件:

  

删除此集合中满足给定谓词的所有元素。

在你的例子中:

first_mas.removeIf(d -> d.equals("1"));

或更好:

first_mas.removeIf("1"::equals);

如果您确实需要在doSomething(List<String> list)方法中执行此操作,只需将原始列表作为参数传递。