首页 > 解决方案 > 从另一个对象列表中删除重复的列表对象值

问题描述

我有两个对象列表,它们的名称在两个列表中都重复。我需要从 list2 中删除 list1 中的所有重复值。

下面是场景,类有 name 变量,这个变量需要检查 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 中的值相同。
例如这里从 list1 中删除数据后,list1 应该只包含一个对象数据。预期输出:

list1 --> [对象('test2')]

list1 大小为 1

请在 Java 8 中使用流向我推荐。

标签: javajava-8java-stream

解决方案


请在带有流的 JAVA 8 中建议我,

在这里,您不想使用流,因为您想修改现有的list1.
您可以做的是list2在 a 中添加元素的名称Set并从中删除list1不包含在的元素Set

Set<String> namesInList2 = list2.stream().map(ObjectClass::getName).collect(toSet());
list1.removeIf(o -> namesInList2.contains(o.getName());

它分两步完成,但足够清晰和高效。


推荐阅读