AssertEquals 2 Lists ignore order
As you mention that you use Hamcrest,
So I would pick one of the collection Matchers
import static org.hamcrest.collection.IsIterableContainingInAnyOrder.containsInAnyOrder;import static org.junit.Assert.assertThat;public class CompareListTest { @Test public void compareList() { List<String> expected = Arrays.asList("String A", "String B"); List<String> actual = Arrays.asList("String B", "String A"); assertThat("List equality without order", actual, containsInAnyOrder(expected.toArray())); } }
You can use List.containsAll with JUnit's assertTrue to check that the first list contains every element from the second one, and vice versa.
assertEquals(expectedList.size(), actualList.size());assertTrue(expectedList.containsAll(actualList));assertTrue(actualList.containsAll(expectedList));
Hint:
This doesn't work with duplicates in the lists.
Here's a solution that avoids quadratic complexity (iterating over the lists multiple times). This uses the Apache Commons CollectionUtils class to create a Map of each item to a frequency count itself in the list. It then simply compares the two Maps.
Assert.assertEquals("Verify same metrics series", CollectionUtils.getCardinalityMap(expectedSeriesList), CollectionUtils.getCardinalityMap(actualSeriesList));
I also just spotted CollectionUtils.isEqualCollection that claims to do exactly what is being requested here...