java8 collect 类型转换_java8使用stream的collect进行list转map注意事项

本文介绍如何使用 Java Stream API 将 List 转换为 Map,并演示了处理重复 key 的方法,同时提供了 HashMap 和 TreeMap 的转换实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.创建Person类

packagecom.xkzhangsan.normal.collectors;public classPerson {privateInteger id;privateString name;privateInteger score;publicInteger getId() {returnid;

}public voidsetId(Integer id) {this.id =id;

}publicString getName() {returnname;

}public voidsetName(String name) {this.name =name;

}publicInteger getScore() {returnscore;

}public voidsetScore(Integer score) {this.score =score;

}

@OverridepublicString toString() {return "Person [id=" + id + ", name=" + name + ", score=" + score + "]";

}

}

2.创建测试类ListToMap

packagecom.xkzhangsan.normal.collectors;importjava.util.ArrayList;importjava.util.List;importjava.util.Map;importjava.util.TreeMap;importjava.util.stream.Collectors;public classListToMap {public static voidmain(String[] args) {//创建list

List personList = new ArrayList<>();for (int i = 0; i < 10; i++) {

Person p= newPerson();

p.setId(i);

p.setName("p"+i);

p.setScore(i*10);

personList.add(p);

}//添加和id=8相同对象score值不同

Person p = newPerson();

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);//转换为HashMap

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。

原文:https://www.cnblogs.com/xkzhangsanx/p/10848548.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值