Java - Comment comparer deux ensembles
En Java, il n'y a pas d'API ready make pour comparer deuxjava.util.Set
1. Solution
Voici mon implémentation, combinezcheck size + containsAll
:
SetUtils.java
package com.example.core.utils; import java.util.Set; public class SetUtils { public static boolean equals(Set> set1, Set> set2){ if(set1 == null || set2 ==null){ return false; } if(set1.size()!=set2.size()){ return false; } return set1.containsAll(set2); } }
2. Test de l'unité
Tests unitaires pour lesSetUtils.java
ci-dessus
TestSetUtils.java
package com.example.core.utils; import org.junit.Test; import java.util.HashSet; import java.util.Set; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; public class TestSetUtils { @Test public void test1() { Settest1 = new HashSet<>(); test1.add("a"); test1.add("b"); Set test2 = new HashSet<>(); test2.add("b"); test2.add("c"); assertThat(SetUtils.equals(test1, test2), is(false)); } @Test public void test2() { Set test1 = new HashSet<>(); test1.add("a"); test1.add("b"); Set test2 = new HashSet<>(); test2.add("a"); test2.add("b"); test2.add("c"); assertThat(SetUtils.equals(test1, test2), is(false)); } @Test public void test3() { Set test1 = new HashSet<>(); test1.add("a"); test1.add("b"); test1.add("c"); Set test2 = new HashSet<>(); test2.add("a"); test2.add("b"); assertThat(SetUtils.equals(test1, test2), is(false)); } //set ignore sequence @Test public void test4() { Set test1 = new HashSet<>(); test1.add("a"); test1.add("b"); Set test2 = new HashSet<>(); test2.add("b"); test2.add("a"); assertThat(SetUtils.equals(test1, test2), is(true)); } @Test public void test5() { Set test1 = new HashSet<>(); test1.add("a"); Set test2 = new HashSet<>(); test2.add("a"); assertThat(SetUtils.equals(test1, test2), is(true)); } }
Exécutez-le, tous les tests unitaires seront réussis.