在 Java 中忽略顺序判断两个集合

1.介绍

对列表进行顺序无关的比较

2.设置

根据 List#equals Java 文档,如果两个列表以相同的顺序包含相同的元素,则它们是相等的。 因此,我们不能仅仅使用 equals 方法,因为我们想做与顺序无关的比较。

准备三个集合数据

    List<Integer> first = Arrays.asList(1, 3, 4, 6, 8);
    List<Integer>  second = Arrays.asList(8, 1, 6, 3, 4);
    List<Integer>  third = Arrays.asList(1, 3, 3, 6, 6);

检查两个列表的大小,并检查第一个列表是否包含第二个列表的所有元素,反之。 尽管此解决方案有效,但可读性不高。

 @Test
 public void test1(){
    
    
        assertTrue(first.size() == second.size() && first.containsAll(second) && second.containsAll(first));
    }

在检查两个列表中的元素是否相同之前,先比较两个列表的大小。 由于这两个条件都返回 true,则测试将通过。

下面是一个失败的测试用例

  @Test
    public void test2() {
    
    
        assertFalse(first.size() == third.size() && first.containsAll(third) && third.containsAll(first));
    }

相比之下,在这个测试中,虽然两个列表的大小相同,但所有元素都不匹配。

3.使用Apache commons

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-collections4</artifactId>
    <version>4.4</version>
</dependency>
 @Test
    public void test3() {
    
    
        assertTrue(CollectionUtils.isEqualCollection(first, second));
        assertFalse(CollectionUtils.isEqualCollection(first, third));
    }

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/niugang0920/article/details/119536483