我有两个对象列表,两个列表中的名称重复。我需要从列表2中删除列表1中的所有重复值。
下面是场景, 类具有名称变量,该变量需要检查list1中的重复值并需要将其删除。
Class ObjectClass{
String name;
}
//这是第一个包含3个对象的列表
List<ObjectClass> list1= new ArrayList();
ObjectClass objectClassDataL1= new ObjectClass();
objectClassDataL1.setName("test");
list1.add(objectClassDataL1);
ObjectClass objectClassDataL2= new ObjectClass();
objectClassDataL2.setName("test2");
list1.add(objectClassDataL2);
ObjectClass objectClassDataL3= new ObjectClass();
objectClassDataL3.setName("test3");
list1.add(objectClassDataL3);
List<ObjectClass> list2= new ArrayList();
ObjectClass objectClassData1= new ObjectClass();
objectClassData1.setName("test");
list2.add(objectClassData1);
ObjectClass objectClassData2= new ObjectClass();
objectClassData2.setName("test3");
list2.add(objectClassData2);
我需要删除list1中具有name
值的对象,如list2中一样。
例如,在从列表1中删除数据之后,列表1应该仅包含一个对象数据。
预期输出:
list1-> [Object('test2')]
list1的大小为1
请在Java 8中使用流向我提出建议。
答案 0 :(得分:4)
请在JAVA 8中通过流向我推荐
在这里,您不想使用流,因为您想修改现有的list1
。
您可以做的是在list2
中添加Set
元素的名称,并从{{1}中删除list1
中不包含的元素:
Set
它使事情分两步进行,但足够清晰和有效。
答案 1 :(得分:3)
您可以将Collection.removeIf
用作:
list1.removeIf(a -> list2.stream().anyMatch(b -> a.getName().equals(b.getName())));