Eu tenho dois lista de objetos, que têm nome como duplicado em ambos lista. Eu preciso remover todo o valor duplicado de list1 de list2.
Abaixo está o cenário, classe têm variável nome, com esta necessidade variável para verificar o valor duplicado de list1 e necessidade de remover.
Class ObjectClass{
String name;
}
// esta é a primeira lista tem 3 objetos
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);
Eu preciso remover em objetos list1 com o name
valor como em list2.
Por exemplo, aqui após a remoção dos dados a partir de lista1, lista1 deve conter apenas um dos dados de objecto. Resultado esperado:
list1 -> [Object ( 'test2')]
tamanho lista1 é 1
Por favor me sugerir em Java 8 com streams.
Por favor me sugerir em JAVA 8 com o córrego,
Aqui você não quiser usar fluxo como você deseja modificar o existente list1
.
O que você pode fazer é adicionar os nomes dos list2
elementos em um Set
e remoção de elementos de list1
que não estão contidas no Set
:
Set<String> namesInList2 = list2.stream().map(ObjectClass::getName).collect(toSet());
list1.removeIf(o -> namesInList2.contains(o.getName());
Isso torna as coisas em duas etapas, mas é o suficiente clara e eficiente.