我想比较两个按任何顺序包含相同元素的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));发布于 2020-04-30 19:53:59
.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)));
}
}注意:外部列表的顺序在两者之间是相同的。否则它就行不通了。
发布于 2019-09-10 23:01:11
您可以尝试使用阿帕奇公域
公共静态布尔isEqualCollection(集合a,集合b) 返回true当且仅当给定集合包含完全相同的元素,其基数完全相同。 也就是说,当a中e的基数等于b中e的基数时,对于a或b中的每个元素e。 参数:
返回:如果集合包含具有相同基数的相同元素,则为真。
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));
}
}https://stackoverflow.com/questions/57878641
复制相似问题