Java8新特性-实现两个集合的交集、差集、并集

1、测试代码

package com.example.demo;

import org.junit.Test;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

/**
 * @author LH
 * @date 2020-04-28 18:11
 */
public class Java8Test extends DemoApplicationTests {

    @Test
    public void CollectionTest() {
        List<String> list1 = new ArrayList<>();
        list1.add("张杰");
        list1.add("萧敬腾");
        list1.add("金玟岐");
        list1.add("邓紫棋");
        list1.add("迈克尔杰克逊");

        List<String> list2 = new ArrayList<>();
        list2.add("张杰");
        list2.add("唐僧");
        list2.add("孙悟空");
        list2.add("猪八戒");
        list2.add("沙僧");

        System.out.println("-- 交集(list1 n list2)...start");
        List<String> intersectList = list1.stream().filter(o -> list2.contains(o)).collect(Collectors.toList());
        intersectList.forEach(o -> System.out.println(o));
        System.out.println();

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

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

        System.out.println("-- 并集(list1 U list2)...start");
        List<String> listTemp1 = list1.parallelStream().collect(Collectors.toList());
        List<String> listTemp2 = list2.parallelStream().collect(Collectors.toList());
        listTemp1.addAll(listTemp2);
        listTemp1.parallelStream().forEach(System.out::println);
        System.out.println();

        System.out.println("-- 去重并集(list1 U list2)...start");
        List<String> listAllDistinct = listTemp1.stream().distinct().collect(Collectors.toList());
        listAllDistinct.parallelStream().forEach(System.out::println);
        System.out.println();

        System.out.println(list1);
        System.out.println(list2);
    }
}

2、测试结果打印

-- 交集(list1 n list2)...start
张杰

-- 差集(list1 - list2)...start
萧敬腾
金玟岐
邓紫棋
迈克尔杰克逊

-- 差集(list2 - list1)...start
猪八戒
沙僧
唐僧
孙悟空

-- 并集(list1 U list2)...start
唐僧
张杰
金玟岐
萧敬腾
孙悟空
张杰
沙僧
邓紫棋
猪八戒
迈克尔杰克逊

-- 去重并集(list1 U list2)...start
金玟岐
唐僧
萧敬腾
张杰
邓紫棋
沙僧
孙悟空
迈克尔杰克逊
猪八戒

[张杰, 萧敬腾, 金玟岐, 邓紫棋, 迈克尔杰克逊]
[张杰, 唐僧, 孙悟空, 猪八戒, 沙僧]

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章