Java8 lambda表达式 多个list取交集

Posted 晓风残月

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java8 lambda表达式 多个list取交集相关的知识,希望对你有一定的参考价值。

Java8之前做法:

/**
     * 从 有值的 list 里取交集
     * @param lists
     * @return
     */
    public List<Object> intersection(List<List<Object>> lists) {
        if(lists == null || lists.size() == 0){
            return null;
        }
        ArrayList<List<Object>> arrayList = new ArrayList<>(lists);
        for (int i = 0; i < arrayList.size(); i++) {
            List<Object> list = arrayList.get(i);
            // 去除空集合
            if (list == null || list.size() == 0) {
                arrayList.remove(list);
                i-- ;
            }
        }
        if(arrayList.size() == 0){
            return null;
        }
        List<Object> intersection = arrayList.get(0) ;
        // 就只有一个非空集合,结果就是他
        if(arrayList.size() == 1){
            return intersection;
        }
        // 有多个非空集合,直接挨个交集
        for (int i = 1; i < arrayList.size()-1; i++) {
            intersection.retainAll(arrayList.get(i));
        }
        return intersection;
    }

Stream风格的:

public static List<Element> retainElementList(List<List<Element>> elementLists) {
     
        Optional<List<Element>> result = elementLists.parallelStream()
            .filter(elementList -> elementList != null && ((List) elementList).size() != 0)
            .reduce((a, b) -> {
                a.retainAll(b);
                return a;
        });
        return result.orElse(new ArrayList<>());
    }

 

以上是关于Java8 lambda表达式 多个list取交集的主要内容,如果未能解决你的问题,请参考以下文章

java8两个List集合取交集并集差集去重并集

Java8===两个List集合取交集并集差集

Java8===两个List集合取交集并集差集

Lambda表达式例子

Java8 Lambda 表达式

Java8 Lambda 表达式