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取交集的主要内容,如果未能解决你的问题,请参考以下文章