J'ai cette liste:Comment couper plusieurs ensembles?
private List<Set<Address>> scanList;
Ma liste contient plusieurs scans que vous pouvez voir. Après chaque analyse, j'ajoute un nouvel ensemble dans la liste.
Après toutes les analyses sont terminées, je voudrais prendre que les adresses qui se produisent dans chaque ensemble et le mettre dans:
private List<Address> addresses;
Est-ce que quelque chose comme cela existe déjà dans Set/TreeSet/HashSet?
EDIT: après les réponses, retainAll() est la bonne méthode. Je vous remercie. Voici la source:
Set<Address> addressCross = scanList.get(0);
for (int i = 1; i < scanList.size(); i++) {
addressCross.retainAll(scanList.get(i));
}
for (Address address : addressCross) {
addresses.add(address);
}
Attention! Selon Louis Wasserman, 'Sets.union()' a de mauvaises performances pour plus de 2 sets. Je crois que la même chose est vraie pour 'Sets.intersection()' (parce que les deux méthodes retournent des vues). – Gili
@Gili: Ceci est généralement vrai, bien qu'il soit atténué par le fait que l'ensemble d'intersection est copié à la fin, ce qui signifie que le coût des ensembles imbriqués est seulement encouru là. Le problème des ensembles de vues imbriqués est plus important si vous passez ensuite le jeu à un autre code qui peut faire plusieurs appels 'contains'. – ColinD
Je suis arrivé à cette discussion un peu en retard, mais cette solution ne suppose-t-elle pas que le premier ensemble contient les éléments «clés». Par exemple, considérons le premier ensemble avec des entiers (11,12), le second avec (1,3,4,5,6), et ainsi de suite. Quand je code ceci, l'ensemble multi-intersection final est vide! – user25029