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
金玟岐
唐僧
蕭敬騰
張傑
鄧紫棋
沙僧
孫悟空
邁克爾傑克遜
豬八戒

[張傑, 蕭敬騰, 金玟岐, 鄧紫棋, 邁克爾傑克遜]
[張傑, 唐僧, 孫悟空, 豬八戒, 沙僧]

 

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