Java - Как сравнить два набора
В Java нет готового API для сравнения двухjava.util.Set
1. Решение
Вот моя реализация, объединитеcheck 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. Модульный тест
Модульные тесты для указанного вышеSetUtils.java
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)); } }
Запустите его, все юнит-тесты пройдут.