Java Stream常见操作

1. List转Map

// key为某属性,value为某属性
Map<Integer, String> idNameMap = userList.stream().collect(Collectors.toMap(User::getId, User::getName));
System.out.println("idNameMap = " + idNameMap);

// key为某属性,value为对象本身(方法1)
Map<Integer, User> idUserMap1 = userList.stream().collect(Collectors.toMap(User::getId, user -> user));
System.out.println("idUserMap1 = " + idUserMap1);

// key为某属性,value为对象本身(方法2)
Map<Integer, User> idUserMap2 = userList.stream().collect(Collectors.toMap(User::getId, Function.identity()));
System.out.println("idUserMap2 = " + idUserMap2);

key值冲突问题:

如果key值冲突会报错如下:

java.lang.IllegalStateException: Duplicate key User(id=3, name=jack)

解决办法:

// key值冲突解决(后面的覆盖前面的)
Map<Integer, User> idUserMap = userList.stream().collect(Collectors.toMap(User::getId, user -> user, (key1, key2) -> key2));
System.out.println("idUserMap = " + idUserMap);

// key值冲突解决(自定义业务逻辑)
Map<Integer, User> idUserMap = userList.stream().collect(Collectors.toMap(User::getId, user -> user, (user1, user2) -> {
	// 根据自己的业务逻辑,返回一个User对象即可
	// 比如这里返回age较大的一个User
	return (user1.getAge() > user2.getAge()) ? user1 : user2;
}));
System.out.println("idUserMap = " + idUserMap);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值