• java Stream 常用语法


    toMap

    list.stream().collect(Collectors.toMap(bean::getKey, value->value));

    Map<Integer, AAA> map = list.stream().collect(Collectors.toMap(AAA::getA, t->t, (v1, v2)->v2, LinkedHashMap::new));

    看着一堆lamdba表达式,好像很难,其实很简单,api doc里各个参数的意义已经写的十分清楚了

    下面简单讲解下:

    Collector<T, ?, M> toMap(Function<? super T, ? extends K> keyMapper,
                                    Function<? super T, ? extends U> valueMapper,
                                    BinaryOperator<U> mergeFunction,
                                    Supplier<M> mapSupplier) {
    

    keyMapper:让你提供一个获取key的lambda, 即 AAA::getA
    valueMapper:让你提供一个获取key的lambda,即e->e,原封不动的返回对象,也可以自己操作,
    mergeFunction :当遇到key冲突时的处理策略,(v1, v2)->v2,当冲突时,取后面的值覆盖前面的值,
    mapSupplier: 让你提供一个获取map的lambda,即LinkedHashMap::new

    坑1 ,

    直接使用 Collectors.toMap() 的话,有一个坑,就是 value 不能为 null,否则会报 NPE

    可以参考这篇博客:
    https://blog.csdn.net/weixin_41905537/article/details/105864504

    解释一下这几个参数的意思:

        <R> R collect(Supplier<R> supplier,
                      BiConsumer<R, ? super T> accumulator,
                      BiConsumer<R, R> combiner);
    

    supplier: map提供器,常用HashMap::new或者LinkedHashMap::new,也可以是别的自定义的map

    accumulator:数据收集器,注意第一个参数是范型R,是第一个参数supplier,提供出来的,即是一个map类型,第二个参数,就是list的item了,
    常见用法:(map, e) -> map.put(e.getId(),e)。将list的每个数据,以id为key,本身为value,塞入到map中

    combiner:数据组合器

    stream 中peek和 map的区别

    map可以改变返回值类型,而peek可修改数据,无法改变返回值类型

  • 相关阅读:
    记一次HDP3.1 spark创建表hive读不到,hive创建表spark读不到
    千锋Django学习笔记
    UE4玩具项目存到Github
    mac中安装软件,提示“恶意软件”字眼的
    python基础之列表 Teddy
    数据库锁的分类
    23种设计模式
    swagger常用注解
    python安装
    点击div外部 执行方法
  • 原文地址:https://www.cnblogs.com/po-shi/p/14267236.html
Copyright © 2020-2023  润新知