Considérant le code ci-dessous et le fait que les 4 Mon objectif est de contenir tous les éléments communs dans les 4 hachures de 4 hachures. P > Ma question est-ce tout d'abord, je le fais-je correctement? Deuxièmement, si je le fais bien, y a-t-il une meilleure façon de le faire? Sinon, quelle solution ai-je pour ce problème? P>
3 Réponses :
Je pense que la meilleure façon de gérer cela est avec Groovy. Je sais que vous n'avez pas demandé Groovy, mais à tout moment, je peux convertir tout ce code en une ligne, il est difficile de résister.
Je pense que vous pouvez simplement appeler retenuall () code> sur le premier ensemble, à l'aide des seconde, troisième et quatrième définit en tant que paramètres:
private static Set<String> getIntersectionSet() {
// create a deep copy of one (in case you don't wish to modify it)
Set<String> interQrels = new HashSet<>(one);
interQrels.retainAll(two); // intersection with two (and one)
interQrels.retainAll(three); // intersection with three (and two, one)
interQrels.retainAll(four); // intersection four (and three, two, one)
return interQrels;
}
Donc, je fais juste sur-réagir pour peupler le premier set à chaque fois que j'utilise retenuall () code>? Je viens de craindre que si certaines informations deviennent manquées.
Si un élément est vraiment commun aux quatre séries, vous n'avez pas besoin de continuer à l'ajouter (pensez-y un instant).
Je suis un peu nouveau à Java 8, mais cela semble assez lisible:
@Test public void testIntersectionBetweenSets() { Collection<String> one = new HashSet<>(4); one.add("Larry"); one.add("Mark"); one.add("Henry"); one.add("Andrew"); Set<String> two = new HashSet<>(2); two.add("Mark"); two.add("Andrew"); Set<String> three = new HashSet<>(3); three.add("Mark"); three.add("Mary"); three.add("Andrew"); Set<String> four = new HashSet<>(3); four.add("Mark"); four.add("John"); four.add("Andrew"); Set<String> intersection = one.stream() .filter(two::contains) .filter(three::contains) .filter(four::contains) .collect(Collectors.toSet()); Collection<String> expected = new HashSet<>(2); expected.add("Andrew"); expected.add("Mark"); Assert.assertEquals(expected, intersection); }
Nice - devrait-il faire des ruisseaux;) +1