java使用流删除一个列表中的元素(如果存在于另一个列表中)
我在这里找不到关于这个问题的线索。如果一个列表(cars1)中的元素存在于另一个列表(cars2)中,我试图使用java流删除其中的元素(在我的例子中是Cars)。 我试着使用removeIf,但后来觉得它更适合处理字符串列表等
Car c1 = new Car();
c1.id = 1;
c1.name = "C1";
Car c2 = new Car();
c2.id = 2;
c2.name = "C2";
List<Car> cars1 = new ArrayList<Car>();
cars1.add(c1);
cars1.add(c2);
List<Car> cars2 = new ArrayList<Car>();
cars2.add(c2);
// TODO : Remove all the cars from cars1 list that are in cars2 list using java streams
# 1 楼答案
只需使用removeAll()方法即可完成。必须在Car类中实现hashcode和equals。 然后你可以
cars1.removeAll(cars2);
。此声明只会在cars1列表中留下c1# 2 楼答案
如果方法
hashCode
和equals
在类Car
中正确实现,则基于流的解决方案可能如下所示:forEach
表示cars2
(影响cars1
):这里,第一个出现的Car实例在
cars1
中被删除removeIf
也应该有效如果由于某种原因
equals
/hashCode
未在类Car
中重写,则可能会提供以下解决方案:removeIf