java Stream的Collectors.toMap是怎么用的?

kingmax54212008 2019-02-28 11:46:53
.collect(Collectors.toMap(UserBo::getUserId, v -> v, (v1, v2) -> v1));

.collect(Collectors.toMap(UserBo::getUserId, v -> v, (k, v) -> v));

对Collectors.toMap有些不清楚。 第三个参数, 是什么作用? 上两个是什么区别,具体含义是什么?

比如:
class UserBo 包含UserId,包含UserName属性。通俗易理解。
...全文
4024 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
秃头侠 2019-04-29
  • 打赏
  • 举报
回复 1
UserBo::getUserId这个地方 如果想自定义key的内容 有没有其他写法,不用在bean里新建方法?
o六耳猕猴桃o 2019-04-15
  • 打赏
  • 举报
回复 4
使用toMap()函数之后,返回的就是一个Map了,自然会需要key和value。 toMap()的第一个参数就是用来生成key值的,第二个参数就是用来生成value值的。 第三个参数用在key值冲突的情况下:如果新元素产生的key在Map中已经出现过了,第三个参数就会定义解决的办法。 在你的例子中 .collect(Collectors.toMap(UserBo::getUserId, v -> v, (v1, v2) -> v1)); 第一个参数UserBo::getUserId 表示选择UserBo的getUserId作为map的key值; 第二个参数v -> v表示选择将原来的对象作为map的value值; 第三个参数(v1, v2) -> v1中,如果v1与v2的key值相同,选择v1作为那个key所对应的value值。
qq_39936465 2019-02-28
  • 打赏
  • 举报
回复 1

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class test4 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		 List<UserBo> list = new ArrayList<>();
	        list.add(new UserBo(100, "Mohan"));
	        list.add(new UserBo(100, "Sohan"));
	        list.add(new UserBo(300, "Mahesh"));
	        Map<Integer, Object> map=list.stream().collect(Collectors.toMap(UserBo::getUserId, v -> v, (k,v)-> v));	
	        map.forEach((k, v) -> System.out.println("Key: " + k +", value: "+ v));

	}

}
class UserBo{
	private int UserId;
	private String UserName;
	public UserBo(int userId, String userName) {
		super();
		UserId = userId;
		UserName = userName;
	}
	public int getUserId() {
		return UserId;
	}
	public void setUserId(int userId) {
		UserId = userId;
	}
	public String getUserName() {
		return UserName;
	}
	public void setUserName(String userName) {
		UserName = userName;
	}
	@Override
	public String toString() {
		return "UserBo [UserId=" + UserId + ", UserName=" + UserName + "]";
	}
	
}
运行结果: Key: 100, value: UserBo [UserId=100, UserName=Sohan] Key: 300, value: UserBo [UserId=300, UserName=Mahesh]

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class test4 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		 List<UserBo> list = new ArrayList<>();
	        list.add(new UserBo(100, "Mohan"));
	        list.add(new UserBo(100, "Sohan"));
	        list.add(new UserBo(300, "Mahesh"));
	        Map<Integer, Object> map=list.stream().collect(Collectors.toMap(UserBo::getUserId, v -> v, (v1,v2)-> v1));	
	        map.forEach((v1, v2) -> System.out.println("Key: " + v1 +", value: "+ v2));

	}

}
class UserBo{
	private int UserId;
	private String UserName;
	public UserBo(int userId, String userName) {
		super();
		UserId = userId;
		UserName = userName;
	}
	public int getUserId() {
		return UserId;
	}
	public void setUserId(int userId) {
		UserId = userId;
	}
	public String getUserName() {
		return UserName;
	}
	public void setUserName(String userName) {
		UserName = userName;
	}
	@Override
	public String toString() {
		return "UserBo [UserId=" + UserId + ", UserName=" + UserName + "]";
	}
	
}
运行结果: Key: 100, value: UserBo [UserId=100, UserName=Mohan] Key: 300, value: UserBo [UserId=300, UserName=Mahesh]

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧