list.stream().collect(Collectors.toMap(User::getId, User::getName, (k1, k2) -> k1))

**

list.stream().collect(Collectors.toMap(User::getId, User::getName, (k1, k2) -> k1))和 list.stream().collect(Collectors.toMap(User::getId, User::getName))区别;

这两个表达式在使用Java 8的Stream API时用于将列表转换为Map对象,但它们之间有一个重要的区别。

区别一:键冲突处理

list.stream().collect(Collectors.toMap(User::getId, User::getName, (k1, k2) -> k1)) 使用三参数形式的toMap()方法。在遇到键冲突时,使用(k1, k2) -> k1的合并函数来解决冲突。这意味着如果存在相同的键,则保留旧值(即保留第一个出现的键对应的值)。
list.stream().collect(Collectors.toMap(User::getId, User::getName)) 使用两参数形式的toMap()方法。在遇到键冲突时,会抛出IllegalStateException异常,报告键的重复。
区别二:Map实现类型

在两个表达式中,最终生成的Map对象的实现类型不同。使用三参数形式的toMap()方法生成的是默认情况下的HashMap实例。
使用两参数形式的toMap()方法生成的是默认情况下的HashMap实例,除非通过其他方式指定了不同的Map实现类型。
综上所述,如果你想要在遇到键冲突时保留旧值,并且最终生成的Map对象使用HashMap实现类型,可以使用 list.stream().collect(Collectors.toMap(User::getId, User::getName, (k1, k2) -> k1))。而如果你希望在遇到键冲突时抛出异常,并且最终生成的Map对象使用默认的HashMap实现类型,可以使用list.stream().collect(Collectors.toMap(User::getId, User::getName))。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值