首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >测试List<List<T>>按任何顺序包含相同的项。

测试List<List<T>>按任何顺序包含相同的项。
EN

Stack Overflow用户
提问于 2019-09-10 21:50:02
回答 2查看 300关注 0票数 2

我想比较两个按任何顺序包含相同元素的List<List<String>>。他们是不平等的。

代码语言:javascript
复制
// expectedResult 
[
  ["ate","eat","tea"],
  ["nat","tan"],
  ["bat"]
]

另一个是

代码语言:javascript
复制
// result
[
  ["eat", "tea", "ate"], 
  ["bat"], 
  ["tan", "nat"]
]

我应该使用哪些测试方法(从哪个库)来比较**元素中的元素而不进行排序?**

我试过没成功。

代码语言:javascript
复制
import static org.hamcrest.collection.IsIterableContainingInAnyOrder.containsInAnyOrder;
import static org.junit.Assert.assertThat;

assertThat(expectedResult, containsInAnyOrder(result));
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-30 19:53:59

.containsAll()方法适用于集合而不是集合。

基本上,我最后比较了第一个集合的每个元素,然后将.containsAll()用于嵌套集合。

代码语言:javascript
复制
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)));
        }
    }

注意:外部列表的顺序在两者之间是相同的。否则它就行不通了。

票数 0
EN

Stack Overflow用户

发布于 2019-09-10 23:01:11

您可以尝试使用阿帕奇公域

公共静态布尔isEqualCollection(集合a,集合b) 返回true当且仅当给定集合包含完全相同的元素,其基数完全相同。 也就是说,当a中e的基数等于b中e的基数时,对于a或b中的每个元素e。 参数:

  • A-第一个集合,不能为空。
  • B-第二个集合,不能为空。

返回:如果集合包含具有相同基数的相同元素,则为

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57878641

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档