java 8 一行代码搞定集合去重,差集,并集,交集,是否相等

Java 社区交流群

添加微信 372787553 备注进群

在Java 以前也许您需要很多的代码才是实现 集合的**去重,交集,差集,并集,判断两个集合是否相等(与顺序无关)**但是这要求在java 8 您只需要一行代码就可以搞定,示例如下:

    List<String> list1 = Stream.of("S0337", "S0ZOM", "S0ZP1").collect(Collectors.toList());
    List<String> list2 = Stream.of("S0337", "S0ZOM", "S0ZP1", "S0ZPL","S0337").collect(Collectors.toList());

    //去重
    List<String> distinct = list2.stream().distinct().collect(Collectors.toList());
    System.out.println("去重后结果:"+distinct);

    //交集
    List<String> intersection = list1.stream().filter(list2::contains)
            .collect(Collectors.toList());
    System.out.println("交集结果:"+intersection);

    //差集
    // list1 差集 list2
    List<String> differenceSet = list1.stream().filter(num -> !list2.contains(num))
            .collect(Collectors.toList());
    System.out.println("list1 差集 list2结果:"+differenceSet);
    // list1 差集 list2
    List<String> differenceSet2 = list2.stream().filter(num -> !list1.contains(num))
            .collect(Collectors.toList());
    System.out.println("list2 差集 list1结果:"+differenceSet2);

    //并集  这里未进行去重,如需要去重请结合以上去重的代码
    list1.addAll(list2);
    System.out.println("并集结果:"+list1);


    List<String> list3 = Stream.of("S0337", "S0ZOM", "S0ZP1").collect(Collectors.toList());
    List<String> list4 = Stream.of( "S0ZOM", "S0ZP1","S0337").collect(Collectors.toList());

    //是否相同
    long count = list3.stream().filter(list4::contains).count();
    boolean flag = list3.size() == count && list3.size() == list4.size();
    System.out.println("是否相同:"+flag);

输出结果为:

去重后结果:[S0337, S0ZOM, S0ZP1, S0ZPL]
交集结果:[S0337, S0ZOM, S0ZP1]
list1 差集 list2结果:[]
list2 差集 list1结果:[S0ZPL]
并集结果:[S0337, S0ZOM, S0ZP1, S0337, S0ZOM, S0ZP1, S0ZPL, S0337]
是否相同:true

本文的分享暂时就到这里,希望对您有所帮助

关注 Java有货领取更多资料
联系小编。微信:372787553,带您进群互相学习
左侧小编微信,右侧获取免费资料
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_38937840/article/details/107338265
今日推荐