Java8的stream处理List集合的(交集、差集,重复)

Java8的stream处理List集合的(交集、差集,重复)

public static void main(String[] args) {
    List<String> list1 = new ArrayList<String>();
    list1.add("1");
    list1.add("2");
    list1.add("2");
    list1.add("3");
    list1.add("3");
    list1.add("5");
    list1.add("5");

    List<String> list2 = new ArrayList<String>();
    list2.add("1");
    list2.add("2");
    list2.add("6");
    list2.add("7");
    list2.add("8");
    list2.add("9");

    // 交集
    List<String> intersection = list1.stream().filter(item -> list2.contains(item)).collect(Collectors.toList());
    System.out.println("---交集 intersection---");
    intersection.parallelStream().forEach(System.out :: println);

    // 差集 (list2 - list1)
    List<String> reduce1 = list2.stream().filter(item -> !list1.contains(item)).collect(Collectors.toList());
    System.out.println("---差集 reduce1 (list2 - list1)---");
    reduce1.parallelStream().forEach(System.out :: println);

    // 获取集合 重复元素
    List<String> collect = list1.stream()
            .collect(Collectors.toMap(e -> e, e -> 1, (a, b) -> a + b)) // 获取元素出现频率的 Map ,键为元素 值为元素重复次数
            .entrySet().stream() //Set<Entry> 转为 Stream<Entry>
            .filter(e -> e.getValue() > 1) // 过滤元素出现次数大于 1 的 entry
            .map(e -> e.getKey()) // 获得 entry 的键(重复的元素)对应的 Stream
            .collect(Collectors.toList()); // 转换为 List
    System.out.println("---重复元素 reduce1 (list1 - list2)---");
    collect.parallelStream().forEach(System.out :: println);
}




import org.apache.commons.collections.CollectionUtils;

public static void main(String[] args) {

        List<String> list1 = Lists.newArrayList("1","2","3","3");
        List<String> list2 = Lists.newArrayList("1","2","3");

        List<String> list3 = Lists.newArrayList("1","2","3");
        List<String> list4 = Lists.newArrayList("3","4","5");    


        System.out.println("集合并集-CollectionUtils.union()");

        System.out.println(CollectionUtils.union(list1,list2));


        System.out.println("集合交集-CollectionUtils.intersection()");

        System.out.println(CollectionUtils.intersection(list1,list2));


        System.out.println("集合差集-CollectionUtils.subtract()");

        System.out.println(CollectionUtils.subtract(list1,list2));


        System.out.println("集合差集-CollectionUtils.subtract()");

        System.out.println(CollectionUtils.subtract(list3,list4));


        System.out.println("集合补集-CollectionUtils.disjunction()");

        System.out.println(CollectionUtils.disjunction(list1,list2));

//        System.out.println("集合交集-list1.retainAll(list2)");
//        System.out.println(list1.retainAll(list2));
//        System.out.println(list1);
//        System.out.println("集合差集-list1.removeAll(list2)");
//        System.out.println(list1.removeAll(list2));
//        System.out.println(list1);


}


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值