Tenho dois ArrayList
objetos com três inteiros cada. Quero encontrar uma maneira de retornar os elementos comuns das duas listas. Alguém tem ideia de como posso conseguir isso?
95
listA.retainAll(listB);
// listA now contains only the elements which are also contained in listB.
Se você quiser evitar que as alterações sejam afetadas em listA
, será necessário criar um novo.
List<Integer> common = new ArrayList<Integer>(listA);
common.retainAll(listB);
// common now contains only the elements which are contained in listA and listB.
Collection#retainAll()
e os comentários nos trechos de código, não, não importa. As alterações são refletidas na lista na qual você está chamando o método.Você pode usar operações de interseção definidas com seus
ArrayList
objetos.Algo assim:
Agora,
l3
deve haver apenas elementos comuns entrel1
el2
.fonte
l2
. Você provavelmente quis dizer emList<Integer> l3 = new ArrayList<Integer>(l2);
vez disso.Por que reinventar a roda? Use coleções comuns :
fonte
retainAll()
em elementos repetidos. Portanto, provavelmente um está correto e o outro incorreto, dependendo de como você aborda o problema.Usando o
Stream.filter()
método Java 8 em combinação comList.contains()
:fonte
fonte
Produto [1, 5]
fonte
Você pode obter os elementos comuns entre duas listas usando o método "reterAll". Este método removerá todos os elementos não correspondentes da lista à qual se aplica.
Neste caso, da lista, todos os elementos que não estão na lista1 serão removidos e ficarão apenas aqueles que são comuns entre a lista e a lista1.
Resultado:
NOTA: Depois de reterAll aplicado na lista, a lista contém elementos comuns entre lista e lista1.
fonte
fonte
fonte
considere duas listas L1 e L2
Usando Java8, podemos descobrir facilmente
L1.stream().filter(L2::contains).collect(Collectors.toList())
fonte
Caso você queira fazer isso sozinho ..
fonte
commons
contém os elementos comuns. O segundo for-loop os imprime no console. Não vejo onde o código está contando os elementos comuns.Algumas das respostas acima são semelhantes, mas não iguais, portanto, publique como uma nova resposta.
Solução:
1. Use o HashSet para manter os elementos que precisam ser removidos
2. Adicione todos os elementos da lista1 ao HashSet
3. itere a lista2 e remova os elementos de um HashSet que estão presentes na lista2 ==> que estão presentes na lista1 e na lista2
4 . Agora itere no HashSet e remova os elementos da lista1 (já que adicionamos todos os elementos da lista1 ao conjunto), finalmente, a lista1 tem todos os elementos comuns
Nota: podemos adicionar todos os elementos da lista2 e em uma terceira iteração, devemos remover os elementos do lista2.
Complexidade de tempo: O (n)
Complexidade do espaço: O (n)
Código:
resultado:
fonte