从另一个对象列表中删除重复的列表对象值

时间:2019-02-08 14:16:36

标签: java java-8 java-stream

我有两个对象列表,两个列表中的名称重复。我需要从列表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中使用流向我提出建议。

2 个答案:

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