List转Map需要注意点是在收集map时Collectors.toMap()建议选三个入参的方法。
示例如下:(注意list中的“张三”有两个我们将其作为Map的key)
####无第三个参数示例
public static void main(String[] args) {
ArrayList<Student> list = new ArrayList<Student>();
list.add(new Student("张三", 19, "杭州"));
list.add(new Student("李四", 18, "北京"));
list.add(new Student("张三", 17, "西安"));
list.add(new Student("赵六", 16, "兰州"));
Map<String, Student> map = list.stream()
.collect(Collectors.toMap(Student::getName, student -> student));
System.out.println(map.toString());
}
执行结果:(Duplicate key 提示key重复,收集map时不知道保留哪个key)
有第三个参数示例: 第三个参数是指明当key重复时,我需要用哪一个
// (k1, k2) -> k2) 当key重复时要将后面出现的作为我的收集对象,抛弃前面已收集的。
// (k1, k2) -> k1) 当key重复时保留已收集的,抛弃新出现的。
public static void main(String[] args) {
ArrayList<Student> list = new ArrayList<Student>();
list.add(new Student("张三", 19, "杭州"));
list.add(new Student("李四", 18, "北京"));
list.add(new Student("张三", 17, "西安"));
list.add(new Student("赵六", 16, "兰州"));
Map<String, Student> map = list.stream()
.collect(Collectors.toMap(Student::getName, student -> student, (k1, k2) -> k1));
System.out.println(map.toString());
}
(k1, k2) -> k2)的结果:(张三的结果是list中最后一次出现的(索引最大的))
{李四=Student{name='李四', age=18, addr='北京'}, 张三=Student{name='张三', age=17, addr='西安'}, 赵六=Student{name='赵六', age=16, addr='兰州'}}
(k1, k2) -> k1)的结果:(张三的结果是list中第一次出现的(索引最小的))
{李四=Student{name='李四', age=18, addr='北京'}, 张三=Student{name='张三', age=19, addr='杭州'}, 赵六=Student{name='赵六', age=16, addr='兰州'}}
标签:Map,List,张三,list,add,k1,Student,new,JAVA8
From: https://www.cnblogs.com/CodeLuckly/p/16859874.html