工具类:list的交集、差集、并集

import org.apache.commons.collections4.CollectionUtils;

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


public class MtListUtil {

    /**
     * 返回对象属性的list
     * @param list
     * @param mapper
     * @param <T>
     * @param <R>
     * @return
     */
    public static <T, R> List<R> getPropertyList(List<T> list, Function<? super T, ? extends R> mapper) {
        List<R> result = new ArrayList<>();
        if (org.apache.commons.collections.CollectionUtils.isEmpty(list)) {
            return result;
        }
        result = list.stream().map(mapper).collect(Collectors.toList());
        return result;
    }


    /**
     * 获取两个list交集
     * @param list1
     * @param list2
     * @return
     */
    public static<T> List<T> getIntersectionList(List<T> list1, List<T> list2){
        if(CollectionUtils.isNotEmpty(list1) && CollectionUtils.isNotEmpty(list2)){
            return list1.stream().filter(item -> list2.contains(item)).collect(Collectors.toList());
        }
        return null;
    }

    /**
     * 获取两个list差集(list1-list2)
     * @param list1
     * @param list2
     * @return
     */
    public static<T> List<T> getReduceList(List<T> list1,List<T> list2){
        if(CollectionUtils.isEmpty(list2)){
            return list1;
        }
        if(CollectionUtils.isNotEmpty(list1)){
            return list1.stream().filter(item -> !list2.contains(item)).collect(Collectors.toList());
        }
        return null;
    }

    /**
     * 获取并集
     * @param list1
     * @param list2
     * @return
     */
    public static<T> List<T> getUnionList(List<T> list1,List<T> list2){
        if(CollectionUtils.isEmpty(list1)){
            return list2;
        }
        if(CollectionUtils.isEmpty(list2)){
            return list1;
        }
        List<T> unionList = list1.parallelStream().collect(Collectors.toList());
        unionList.addAll(list2);
        return unionList;
    }

    /**
     * 获取去重并集
     * @param list1
     * @param list2
     * @return
     */
    public static<T> List<T> getDistinctUnionList(List<T> list1,List<T> list2){
        List<T> unionList = MtListUtil.getUnionList(list1, list2);
        return unionList.stream().distinct().collect(Collectors.toList());
    }

}

 

posted @ 2018-07-19 15:20  刘尊礼  阅读(715)  评论(0)    收藏  举报