Java8计算两个List集合取交集、并集、差集

一、取交集、并集、差集

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

/**
 * @author Alan Chen
 * @description
 * @date 2021/8/11
 */
public class Test {

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

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

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

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

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

        // 并集
        List<String> listAll = list1.parallelStream().collect(Collectors.toList());
        List<String> listAll2 = list2.parallelStream().collect(Collectors.toList());
        listAll.addAll(listAll2);
        System.out.println("---并集 listAll---");
        listAll.parallelStream().forEachOrdered(System.out :: println);

        // 去重并集
        List<String> listAllDistinct = listAll.stream().distinct().collect(Collectors.toList());
        System.out.println("---得到去重并集 listAllDistinct---");
        listAllDistinct.parallelStream().forEachOrdered(System.out :: println);

        System.out.println("---原来的List1---");
        list1.parallelStream().forEachOrdered(System.out :: println);
        System.out.println("---原来的List2---");
        list2.parallelStream().forEachOrdered(System.out :: println);

    }
}

二、差集去重 & 不去重

public class Client {

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

        List<String> list2 = new ArrayList<>();
        list2.add("a");

        //a
        List<String> list3 = minus(list1, list2);
        for (String item : list3) {
            System.out.println(item);
        }
    }

    /**
     * 集合差集:去重
     *
     * @param list1
     * @param list2
     * @return
     */
    private static List<String> minus2(List<String> list1, List<String> list2) {
        return list1.stream().filter(item -> !list2.contains(item)).collect(Collectors.toList());
    }

    /**
     * 集合差集:不去重
     *
     * @param list1
     * @param list2
     * @return
     */
    private static List<String> minus(List<String> list1, List<String> list2) {
        if (CollectionUtil.isEmpty(list1) || CollectionUtil.isEmpty(list2)) {
            return list1;
        }

        List<String> newList = list1.stream().collect(Collectors.toList());
        for (String target : list2) {
            Optional<String> opt = newList.stream().filter(item -> item.equals(target)).findFirst();
            if (opt.isPresent()) {
                int firstIndex = newList.indexOf(target);
                newList.remove(firstIndex);
            }
        }
        return newList;
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容