JDK8特性--Stream(list转map)
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)相关推荐
- JDK8特性--Stream(求和,过滤,排序)
Stream简介 Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据. Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Jav ...
- JDK8新特性(十)之Stream流的map和reduce组合使用、mapToInt()、concat()方法
1.Stream流的map和reduce组合使用 假设当前存在Person类,下述两个Person类的需求都是借助Stream流的map()和reduce()方法 import lombok.AllA ...
- JDK8新特性(八)之Stream流的map()、sorted()、distinct()、match()方法
1.Stream流的map()方法 如果需要将流中的元素映射到另一个流中,可以使用map方法.方法声明: <R> Stream<R> map(Function<? sup ...
- jdk8新特性Stream基础了解
Java 8 Stream API 基础了解 1.Stream概念 2.数据源 3.中间操作 4.最终操作 5.Stream使用注意事项 1.java.util.stream.Stream概念 *Ja ...
- stream流_最详细的JDK8新特性————Stream流
Stream流 在Java 8中,得益于Lambda所带来的函数式编程,引入了一个全新的Stream概念,用于解决已有集合类库既有的弊 端. 传统集合的多步遍历代码: 几乎所有的集合(如Collect ...
- java8新特性-stream对map集合进行过滤的方法
java8新特性-stream对map集合进行过滤的方法 stream对map集合进行过滤的方法
- Java JDK8新特性Stream流
1.Stream流 1. 流,支持处理数据处理操作的源生成的元素序列.流有两个重要特性:1流水线:很多流操作本身会返回一个流,这样多的操作就可以链接起来,形成一个大的流水线.2,内部迭代.流的迭代是在 ...
- 夯实基础,Java8新特性Stream详细教程
1 基本特性 Java8的API中添加了一个新的特性: 流,即stream.stream是将数组或者集合的元素视为流,流在管道中流动过程中,对数据进行筛选.排序和其他操作. 1.1 流的特性 stre ...
- JDK8特性函数式接口与Stram流
JDK8特性函数式接口与Stram流 函数式接口 函数式接口,一般java中一个接口中只有一个方法就可以被认为是函数式接口,用于契合jdk8中的lamda的 在jdk用也有很多函数式接口,比如典型的R ...
最新文章
- 使用PLP特征训练crnn语音分类
- Linux定时任务Crontab学习笔记
- vim的常用配置及使用方法
- tlias 教学过程_2020年Java生存现状!建议程序员了解一下!
- 基础练习 十六进制转十进制 c语言
- Gartner:缺乏技术人才将影响企业数字化转型
- WPF编游戏系列 之六 动画效果(1)
- Oracle数据库中序列用法讲解(转)
- Hibernate中createCriteria即QBC查询的详细用法
- 仿探探交友小程序V7.0.2 完整安装包+小程序前端
- GATK使用方法详解(原始数据的处理)
- Photoshop怎样快速调整画笔大小
- 用计算机管理硬盘分区,硬盘分区diskgenius工具使用方法,教你如何进行硬盘管理...
- 从《天行九歌》到海盗问题
- kafka-topics.sh脚本详解
- ceph kernel rbd (二): rbd map , rbd unmap
- AI学习之路(14): 张量的平方计算
- 几种技巧,帮你提升接口查询速度
- Abnova荧光原位杂交(FISH)探针解决方案
- AutoCTS: Automated Correlated Time Series Forecasting