JDK8特性--Stream(求和,过滤,排序)   这里是其他一些stream的有用法,有需要的可以看看。

言归正传,现在主要是是学习list转map,使用的方法是Stream中Collectors的toMap方法:Collectors.toMap。

首先我们构造一个list

        //声明一个List集合List<People> list = new ArrayList();list.add(new People("小A", "数学"));list.add(new People("小B", "语文"));list.add(new People("小C", "英语"));System.out.println(list.toString());//将list转换map

打印结果如下

1.普通转换

        Map<String, String> map = list.stream().collect(Collectors.toMap(People::getName, People::getCourse));System.out.println(map);

打印结果如下

2.有相同key时,会报错

同样构建一个list

        //声明一个List集合List<People> list = new ArrayList();list.add(new People("小A", "数学"));list.add(new People("小B", "语文"));list.add(new People("小C", "英语"));list.add(new People("小C", "历史"));  //新增行System.out.println(list.toString());   

list打印如下:

 这样如果还如上面的转化 。

会报错,错误如下:

解决办法:

2.1 留下一个

        //将list转换map,->箭头后的值是当遇到相同时,留下第一个还是第二个Map<String, String> map = list.stream().collect(Collectors.toMap(People::getName, People::getCourse,(key1 , key2)-> key2 ));System.out.println(map);

打印如下:

2.2重复时将前面的value 和后面的value拼接起来

Map<String, String> map = list.stream().collect(Collectors.toMap(Person::getId, Person::getName,(key1 , key2)-> key1+","+key2 ));System.out.println(map);

打印结果如下:

2.3 重复时将重复key的数据组成集合

        Map<String, List<String>> map = list.stream().collect(Collectors.toMap(People::getName,p ->  {List<String> getNameList = new ArrayList<>();getNameList.add(p.getCourse());return getNameList;},(List<String> value1, List<String> value2) -> {value1.addAll(value2);return value1;}));System.out.println(map);

打印结果如下:

3.字段为空的情况,会出现空指针异常。

构建一个list,普通转换

        //声明一个List集合List<People> list = new ArrayList();list.add(new People("小A", "数学"));list.add(new People("小B", "语文"));list.add(new People("小C", null));System.out.println(list.toString());//将list转换map,->箭头后的值是当遇到相同时,留下第一个还是第二个Map<String, String> map = list.stream().collect(Collectors.toMap(People::getName, People::getCourse));System.out.println(map);

报错如下:

3.1解决办法如下:

        Map<String, List<String>> map = list.stream().collect(Collectors.toMap(People::getName,p ->  {List<String> getNameList = new ArrayList<>();getNameList.add(p.getCourse());return getNameList;},(List<String> value1, List<String> value2) -> {value1.addAll(value2);return value1;}));System.out.println(map);

打印结果如下:

JDK8特性--Stream(list转map)相关推荐

  1. JDK8特性--Stream(求和,过滤,排序)

    Stream简介 Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据. Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Jav ...

  2. JDK8新特性(十)之Stream流的map和reduce组合使用、mapToInt()、concat()方法

    1.Stream流的map和reduce组合使用 假设当前存在Person类,下述两个Person类的需求都是借助Stream流的map()和reduce()方法 import lombok.AllA ...

  3. JDK8新特性(八)之Stream流的map()、sorted()、distinct()、match()方法

    1.Stream流的map()方法 如果需要将流中的元素映射到另一个流中,可以使用map方法.方法声明: <R> Stream<R> map(Function<? sup ...

  4. jdk8新特性Stream基础了解

    Java 8 Stream API 基础了解 1.Stream概念 2.数据源 3.中间操作 4.最终操作 5.Stream使用注意事项 1.java.util.stream.Stream概念 *Ja ...

  5. stream流_最详细的JDK8新特性————Stream流

    Stream流 在Java 8中,得益于Lambda所带来的函数式编程,引入了一个全新的Stream概念,用于解决已有集合类库既有的弊 端. 传统集合的多步遍历代码: 几乎所有的集合(如Collect ...

  6. java8新特性-stream对map集合进行过滤的方法

    java8新特性-stream对map集合进行过滤的方法 stream对map集合进行过滤的方法

  7. Java JDK8新特性Stream流

    1.Stream流 1. 流,支持处理数据处理操作的源生成的元素序列.流有两个重要特性:1流水线:很多流操作本身会返回一个流,这样多的操作就可以链接起来,形成一个大的流水线.2,内部迭代.流的迭代是在 ...

  8. 夯实基础,Java8新特性Stream详细教程

    1 基本特性 Java8的API中添加了一个新的特性: 流,即stream.stream是将数组或者集合的元素视为流,流在管道中流动过程中,对数据进行筛选.排序和其他操作. 1.1 流的特性 stre ...

  9. JDK8特性函数式接口与Stram流

    JDK8特性函数式接口与Stram流 函数式接口 函数式接口,一般java中一个接口中只有一个方法就可以被认为是函数式接口,用于契合jdk8中的lamda的 在jdk用也有很多函数式接口,比如典型的R ...

最新文章

  1. 使用PLP特征训练crnn语音分类
  2. Linux定时任务Crontab学习笔记
  3. vim的常用配置及使用方法
  4. tlias 教学过程_2020年Java生存现状!建议程序员了解一下!
  5. 基础练习 十六进制转十进制 c语言
  6. Gartner:缺乏技术人才将影响企业数字化转型
  7. WPF编游戏系列 之六 动画效果(1)
  8. Oracle数据库中序列用法讲解(转)
  9. Hibernate中createCriteria即QBC查询的详细用法
  10. 仿探探交友小程序V7.0.2 完整安装包+小程序前端
  11. GATK使用方法详解(原始数据的处理)
  12. Photoshop怎样快速调整画笔大小
  13. 用计算机管理硬盘分区,硬盘分区diskgenius工具使用方法,教你如何进行硬盘管理...
  14. 从《天行九歌》到海盗问题
  15. kafka-topics.sh脚本详解
  16. ceph kernel rbd (二): rbd map , rbd unmap
  17. AI学习之路(14): 张量的平方计算
  18. 几种技巧,帮你提升接口查询速度
  19. Abnova荧光原位杂交(FISH)探针解决方案
  20. AutoCTS: Automated Correlated Time Series Forecasting

热门文章

  1. python3 导入上级目录中的模块
  2. shell中循环安装软件包
  3. PHP如何添加自带的扩展库
  4. linux下访问windows的共享
  5. Linux : SUID SGID
  6. Linux静态/动态链接库的创建和使用
  7. Linux C编程--线程操作3--线程属性解析
  8. 阿里巴巴云舒:弹性计算的安全问题
  9. linux正则表达式的使用方法,Linux中基本正则表达式
  10. 查看linux糸统dns是否运行,探查Linux系统DNS服务器运行状况