import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
class Main {
public static void main(String[] args) {
// Initialisation des 4 listes (16 élements, 3 répétés (2, 5, 10))
final Collection<Long> premierePageMouvementsIds = new ArrayList(Arrays.asList( 1L, 3L, 5L, 7L));
final Collection<Long> deuxiemePageMouvementsIds = new ArrayList(Arrays.asList( 2L, 4L, 6L, 8L));
final Collection<Long> troisiemePageMouvementsIds = new ArrayList(Arrays.asList(2L, 9L, 10L, 11L));
final Collection<Long> quatriemePageMouvementsIds = new ArrayList(Arrays.asList(5L, 10L, 15L, 20L));
// Construction de la liste de tous les élements
final List<Long> mouvementsIds = new ArrayList<>();
mouvementsIds.addAll(premierePageMouvementsIds);
mouvementsIds.addAll(deuxiemePageMouvementsIds);
mouvementsIds.addAll(troisiemePageMouvementsIds);
mouvementsIds.addAll(quatriemePageMouvementsIds);
// Liste des élements différents
// (un hashset ne peut contenir plusieurs fois le même élement)
final Collection<Long> different = new HashSet<>();
// Liste des élements similaires
final Collection<Long> similar = new HashSet<>();
// Construction des listes
for (Long id : mouvementsIds) {
if (different.contains(id)) {
similar.add(id);
} else {
different.add(id);
}
}
// Calcul du nombre d'élements total
final long numberOfElements = premierePageMouvementsIds.size() +
deuxiemePageMouvementsIds.size() +
troisiemePageMouvementsIds.size() +
quatriemePageMouvementsIds.size();
// Résultat
System.out.println(numberOfElements + " total elements");
System.out.println(similar.size() + " similar: " + similar);
System.out.println(different.size() + " different");
if (similar.size() + different.size() != numberOfElements) {
System.out.println("");
System.out.println(" > There is an error somewhere in the algorithm");
}
}
}