博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java8使用stream的collect进行list转map注意事项
阅读量:4568 次
发布时间:2019-06-08

本文共 3576 字,大约阅读时间需要 11 分钟。

1.创建Person类

package com.xkzhangsan.normal.collectors;public class Person {        private Integer id;    private String name;    private Integer score;    public Integer getId() {        return id;    }    public void setId(Integer id) {        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public Integer getScore() {        return score;    }    public void setScore(Integer score) {        this.score = score;    }        @Override    public String toString() {        return "Person [id=" + id + ", name=" + name + ", score=" + score + "]";    }    }

2.创建测试类ListToMap

package com.xkzhangsan.normal.collectors;import java.util.ArrayList;import java.util.List;import java.util.Map;import java.util.TreeMap;import java.util.stream.Collectors;public class ListToMap {        public static void main(String[] args) {        //创建list        List
personList = new ArrayList<>(); for (int i = 0; i < 10; i++) { Person p = new Person(); p.setId(i); p.setName("p"+i); p.setScore(i*10); personList.add(p); } //添加和id=8相同对象score值不同 Person p = new Person(); p.setId(8); p.setName("p"+8); p.setScore(88); personList.add(p); System.out.println("list:========================"); personList.stream().forEach(System.out::println); //转换为HashMap Map
map = personList.stream().collect(Collectors.toMap(Person::getId, d->d, (oldValue, newValue)->newValue)); System.out.println("hashMap:========================"); map.entrySet().stream().forEach(System.out::println); //转换为TreeMap Map
treeMap = personList.stream().collect(Collectors.toMap(Person::getId, d->d, (oldValue, newValue)->newValue, TreeMap::new)); System.out.println("treeMap:========================"); treeMap.entrySet().stream().forEach(System.out::println); }}

3.测试结果

list:========================Person [id=0, name=p0, score=0]Person [id=1, name=p1, score=10]Person [id=2, name=p2, score=20]Person [id=3, name=p3, score=30]Person [id=4, name=p4, score=40]Person [id=5, name=p5, score=50]Person [id=6, name=p6, score=60]Person [id=7, name=p7, score=70]Person [id=8, name=p8, score=80]Person [id=9, name=p9, score=90]Person [id=8, name=p8, score=88]hashMap:========================0=Person [id=0, name=p0, score=0]1=Person [id=1, name=p1, score=10]2=Person [id=2, name=p2, score=20]3=Person [id=3, name=p3, score=30]4=Person [id=4, name=p4, score=40]5=Person [id=5, name=p5, score=50]6=Person [id=6, name=p6, score=60]7=Person [id=7, name=p7, score=70]8=Person [id=8, name=p8, score=88]9=Person [id=9, name=p9, score=90]treeMap:========================0=Person [id=0, name=p0, score=0]1=Person [id=1, name=p1, score=10]2=Person [id=2, name=p2, score=20]3=Person [id=3, name=p3, score=30]4=Person [id=4, name=p4, score=40]5=Person [id=5, name=p5, score=50]6=Person [id=6, name=p6, score=60]7=Person [id=7, name=p7, score=70]8=Person [id=8, name=p8, score=88]9=Person [id=9, name=p9, score=90]

 

4.注意事项

(1)list转map要注意重复对象,map转换方法要选择带mergeFunction参数的方法,如果key值重复,做合并处理,不然会抛异常!可以做到去重效果。

比如上面故意添加和id=8相同对象score为88,值不同。在map转换方法mergeFunction 为(oldValue, newValue)->newValue 使用新对象替换已有老对象,可以看到转换后id8的对象score变为88。

 

(2)list转map默认转换为HashMap,可以选择带mapSupplier参数的方法,选择要转换为的map类型。

比如上面TreeMap::new,选择转换为TreeMap。

 github地址:

转载于:https://www.cnblogs.com/xkzhangsanx/p/10848548.html

你可能感兴趣的文章
教你用shell写CGI程序
查看>>
窗口 对话框 Pop Dialog 示例
查看>>
ubuntu(centos) server安装vmware tools
查看>>
数据结构之最大不重复串
查看>>
为什么要配置sdk-tools/platform-toools?
查看>>
自己动手开发更好用的markdown编辑器-07(扩展语法)
查看>>
maven dependency:tree中反斜杠的含义
查看>>
队列的循环队列
查看>>
程序中的日期格式
查看>>
大众点评CAT错误总结以及解决思路
查看>>
从0开始学爬虫3之xpath的介绍和使用
查看>>
Shell成长之路
查看>>
vim下正则表达式的非贪婪匹配
查看>>
一个python的计算熵(entropy)的函数
查看>>
spring源码学习——spring整体架构和设计理念
查看>>
模拟window系统的“回收站”
查看>>
报文格式【定长报文】
查看>>
RDLC报表钻取空白页问题
查看>>
多路电梯调度的思想
查看>>
jQuery-对Select的操作
查看>>