Удалить дублирующее значение объекта списка из другого списка объектов - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть два списка объектов, имена которых дублируются в обоих списках.Мне нужно удалить все дублирующиеся значения из list1 из list2.

Ниже приведен сценарий, у класса есть переменная 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 -> [Object ('test2')]

размер списка 1 равен 1

Пожалуйста, предложите мне в Java 8 спотоки.

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

Пожалуйста, предложите мне в JAVA 8 с потоком,

Здесь вы не хотите использовать поток, поскольку вы хотите изменить существующий list1.
Что вы можетеdo добавляет имена list2 в Set элементов и удаляет из list1 элементы, которые не содержатся в Set:

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

. Это делает вещи в два этапа, но этоясно и достаточно эффективно.

0 голосов
/ 08 февраля 2019

Вы можете использовать Collection.removeIf как:

list1.removeIf(a -> list2.stream().anyMatch(b -> a.getName().equals(b.getName())));
...