首页 > 社交 > 科普中国

「java8」阿里架构师:Stream对集合的处理方式你全都知道了吗?

常驻编辑 科普中国 2022-09-20 方式   阿里   数组   函数   属性   元素   对象   条件   类型   代码   操作
Oqv拜客生活常识网


Oqv拜客生活常识网

userList.stream().limit(2).forEach(user -> System.out.println("姓名:" + user.getName()));
 


6.最大值最小值Oqv拜客生活常识网


Oqv拜客生活常识网

 int maxAge = userList.stream().mapToInt(User::getAge).max().getAsInt();
 int minAge = userList.stream().mapToInt(User::getAge).min().getAsInt();


Oqv拜客生活常识网

封装的Stream使用类,可以直接拿走使用:


Oqv拜客生活常识网

public class StreamUtils {
    /**
     * 集合为空,创建空的Stream流;否则创建集合的Stream流
     * 避免出现空指针
     *
     * @param collection 集合
     * @param    集合元素的泛型
     * @return Stream对象
     */
    private static  Stream streamOf(Collection collection) {
        return CollectionUtils.isEmpty(collection) ? Stream.empty() : collection.stream();
    }

    /**
     * 按照映射规则映射成一个新的集合流
     *
     * @param list  集合
     * @param mapper   集合属性元素
     * @param    函数输入类型的泛型
     * @param    函数结果类型的泛型
     * @return  新的集合
     */
    public static  List mapList(List list, Function<? super T, ? extends R> mapper) {
        return streamOf(list).map(mapper).collect(Collectors.toList());
    }

    /**
     * 根据给定的条件进行筛选,将符合条件的元素提取成新的流
     *
     * @param list          集合
     * @param predicate     筛选规则
     * @param            流元素的类型
     * @return  符合条件的流集合
     */
    public static  List filter(List list, Predicate<? super T> predicate) {
        return streamOf(list).filter(predicate).collect(Collectors.toList());
    }

    /**
     * 根据给定的条件进行筛选,将符合条件的元素提取成新的流
     *
     * @param list          集合
     * @param predicates    多个筛选条件
     * @param            流元素的类型
     * @return 符合条件的流集合
     */
    @SafeVarargs
    public static  List filters(List list, Predicate<? super T> ... predicates) {
        Stream stream = streamOf(list);
        for (Predicate<? super T> predicate : predicates) {
            stream = stream.filter(predicate);
        }
        return stream.collect(Collectors.toList());
    }

    /**
     * 根据指定元素对集合进行升序排序
     *
     * @param list  集合
     * @param keyExtractor  用来排序的元素
     * @param    函数输入类型的泛型
     * @param    函数结果类型的泛型
     * @return  排序后的集合
     */
    public static > List sorted(
            List list, Function<? super T, ? extends U> keyExtractor) {
        return streamOf(list).sorted(Comparator.comparing(keyExtractor)).collect(Collectors.toList());
    }

    /**
     * 根据指定元素对集合进行升序排序
     *
     * @param list  集合
     * @param keyExtractor  用来排序的元素
     * @param limit     排序后集合中保留的数量
     * @param    函数输入类型的泛型
     * @param    函数结果类型的泛型
     * @return  排序后的集合
     */
    public static > List sorted(
            List list, Function<? super T, ? extends U> keyExtractor, Integer limit) {
        return streamOf(list).sorted(Comparator.comparing(keyExtractor)).limit(limit).collect(Collectors.toList());
    }

    /**
     * 根据指定元素对集合进行降序排序
     *
     * @param list  集合
     * @param keyExtractor  用来排序的元素
     * @param    函数输入类型的泛型
     * @param    函数结果类型的泛型
     * @return  排序后的集合
     */
    public static > List sortedDesc(
            List list, Function<? super T, ? extends U> keyExtractor) {
        return streamOf(list).sorted(Comparator.comparing(keyExtractor).reversed()).collect(Collectors.toList());
    }

    /**
     *根据规则判断元素是否匹配
     *
     * @param list  集合
     * @param predicate 匹配规则
     * @param    元素类型
     * @return  匹配结果
     */
    public static  boolean anyMatch(List list, Predicate<? super T> predicate) {
        return streamOf(list).anyMatch(predicate);
    }

    /**
     * 将List集合转换成Map集合,同一个key时对value进行去重,保留第一个出现的value值
     *
     * @param list  集合
     * @param keyMapper     新的Map中的key
     * @param    参数的类型
     * @return  转换后的Map集合   
     */
    public static  Map< K, T> toMapDistinctFirst(List list, Function<? super T, ? extends K> keyMapper) {
        return streamOf(list).collect(Collectors.toMap(keyMapper, Function.identity(), (key1, key2) -> key1));
    }

    /**
     * 将List集合转换成Map集合,同一个key时对value进行去重,保留最后出现的value值
     *
     * @param list  集合
     * @param keyMapper     新的Map中的key
     * @param     

相关阅读:

  • 娱乐方式有哪些(人一生要体验的60种娱乐方式)
  • 经营方式有哪些(经营市场的基本模式有哪四种)
  • 接口方式有哪些(不属于接口请求方式的是)
  • 有哪些投资方式(理财方法大全)
  • 投资方式有哪些(企业的投资方式有哪些)
  • 淘宝有哪些推广方式(淘宝店铺宣传方式)
  • 编码方式有哪些(几种编码方式的特点)
  • 送达方式有哪些(法院送达的方式有几种)
  • 地暖有哪些(新取暖方式)
  • 线下推广方式有哪些(线下宣传活动的方式)
    • 网站地图 |
    • 声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。文章内容仅供参考,不做权威认证,如若验证其真实性,请咨询相关权威专业人士。