java8 stream两个List集合交集、差集、并集操作

public static void main(String[] args) {
        List aList = new ArrayList<>();
        for(int i =0;i< 5;i++){
            TestA a = new TestA();
            a.setId(Long.valueOf(i+1));
            a.setName(i+"名字");
            a.setAge("10");
            a.setSex(1l);
            aList.add(a);
        }
        for(int i =0;i< 2;i++){
            TestA a = new TestA();
            a.setId(Long.valueOf(i+20));
            a.setName(i+"名字");
            a.setAge("10");
            a.setSex(1l);
            aList.add(a);
        }

        List bList = new ArrayList<>();
        for(int i =0;i< 3;i++){
            TestA a = new TestA();
            a.setId(Long.valueOf(i+1));
            a.setName(i+"名字");
            a.setAge("10");
            a.setSex(1l);
            bList.add(a);
        }
        for(int i =0;i< 2;i++){
            TestA a = new TestA();
            a.setId(Long.valueOf(i+10));
            a.setName(i+"名字");
            a.setAge("10");
            a.setSex(1l);
            bList.add(a);
        }

        //取交集
        List intersectionList = aList.stream().filter(a->
                bList.stream().map(b-> b.getId().longValue()).collect(Collectors.toList()).contains(a.getId().longValue())
        ).collect(Collectors.toList());
        System.out.println("交集"+intersectionList);

        //取差集
        List differenceSetAList = aList.stream().filter(a->
                !bList.stream().map(b-> b.getId().longValue()).collect(Collectors.toList()).contains(a.getId().longValue())
        ).collect(Collectors.toList());
        System.out.println("差集"+differenceSetAList);

        //并集(把A和B中分别取到的差合并到一起)
        List differenceSetBList = bList.stream().filter(b->
                !aList.stream().map(a-> a.getId().longValue()).collect(Collectors.toList()).contains(b.getId().longValue())
        ).collect(Collectors.toList());

        List unionList = new ArrayList<>(differenceSetAList);
        unionList.addAll(differenceSetBList);
        System.out.println("并集"+unionList);

    }

在一般情况下可使用parallelStream替代stream,针对parallelStream和stream区别就是stream是顺序流,由主线程按顺序对流执行操作,而parallelStream是并行流,内部以多线程并行执行的方式对流进行操作,但前提是流中的数据处理没有顺序要求。如果数据量较大,并行流可以加快处理速度。

仅供参考,希望对您有所帮助,感谢阅读。


注:本文章,是从各大网站、各位道友以及老师等处学习,自己总结做的一些笔记,不对的地方望海涵,如有问题,请及时联系。

你可能感兴趣的:(学习笔记,java,开发语言)