例如,在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}}
答案 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)
方法中执行此操作,只需将原始列表作为参数传递。