我想比较以任何顺序包含相同元素的两个List<List<String>>
。他们不平等。
// expectedResult
[
["ate","eat","tea"],
["nat","tan"],
["bat"]
]
另一个是
// result
[
["eat", "tea", "ate"],
["bat"],
["tan", "nat"]
]
我应该使用哪些测试方法(来自哪个库)来比较**元素中的元素而不进行排序?**
我尝试失败了。
import static org.hamcrest.collection.IsIterableContainingInAnyOrder.containsInAnyOrder;
import static org.junit.Assert.assertThat;
assertThat(expectedResult, containsInAnyOrder(result));
答案 0 :(得分:1)
您可以尝试使用 Apache Commons
public static boolean isEqualCollection(Collection a, Collection b)
如果给定Collections包含具有完全相同基数的完全相同元素,则返回true。
也就是说,对于a或b中的每个元素e,如果a中e的基数等于b中e的基数。
参数:
- a-第一个集合,不能为空
- b-第二个集合,不能为空
返回: true (如果集合包含具有相同基数的相同元素)。
import org.apache.commons.collections4.CollectionUtils;
import org.junit.Assert;
import org.junit.Test;
import java.util.Arrays;
import java.util.List;
public class TestSO {
@Test
public void testLists() {
List<List<String>> list = Arrays.asList(Arrays.asList("ate", "eat", "tea"), Arrays.asList("nat", "tan"), Arrays.asList("bat"));
List<List<String>> sameList = Arrays.asList(Arrays.asList("ate", "eat", "tea"), Arrays.asList("bat"), Arrays.asList("nat", "tan"));
List<List<String>> differentList = Arrays.asList(Arrays.asList("ate", "eat"), Arrays.asList("bat"), Arrays.asList("nat", "tan"));
Assert.assertTrue(CollectionUtils.isEqualCollection(list, sameList));
Assert.assertFalse(CollectionUtils.isEqualCollection(list, differentList));
}
}
答案 1 :(得分:0)
方法.containsAll()
适用于集合,不适用于集合的集合。
基本上,我最终比较了第一个集合的每个元素,然后对嵌套集合使用.containsAll()
。
import org.junit.Assert;
import org.junit.Test;
import java.util.Arrays;
import java.util.List;
@Test
public void groupAnagramsTest() {
List<List<String>> expectedResult = Arrays.asList(Arrays.asList("bat"), Arrays.asList("nat", "tan"), Arrays.asList("ate", "eat", "tea"));
List<List<String>> result = Arrays.asList(Arrays.asList("bat"), Arrays.asList("tan", "nat"), Arrays.asList("tea", "eat", "ate"));
// to test the equality without order,
// assert that all elements are contained in the compared list and vice versa
for (int i = 0; i < result.size(); i++) {
Assert.assertTrue(expectedResult.get(i).containsAll(result.get(i)));
Assert.assertTrue(result.get(i).containsAll(expectedResult.get(i)));
}
}
注意:外部List的顺序在两者之间是相同的。否则它将无法正常工作。