List转Map需要注意点是在收集map时Collectors.toMap()建议选三个入参的方法。
示例如下:(注意list中的”张三”有两个我们将其作为Map的key)
java<strong><em>*</em></strong>*</p>
<h4>无第三个参数示例</h4>
<pre><code>public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add(new Student("张三", 19, "杭州"));
list.add(new Student("李四", 18, "北京"));
list.add(new Student("张三", 17, "西安"));
list.add(new Student("赵六", 16, "兰州"));
Map map = list.stream()
.collect(Collectors.toMap(Student::getName, student -> student));
System.out.println(map.toString());
}
</code></pre>
<pre><code>
#### 执行结果:(Duplicate key 提示key重复,收集map时不知道保留哪个key)
![JAVA8-Lambda-List转Map](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20230619/2295904-20221105111541114-1902671165.png)
#### 有第三个参数示例: 第三个参数是指明当key重复时,我需要用哪一个
// (k1, k2) -> k2) 当key重复时要将后面出现的作为我的收集对象,抛弃前面已收集的。
// (k1, k2) -> k1) 当key重复时保留已收集的,抛弃新出现的。
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add(new Student("张三", 19, "杭州"));
list.add(new Student("李四", 18, "北京"));
list.add(new Student("张三", 17, "西安"));
list.add(new Student("赵六", 16, "兰州"));
Map 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='兰州'}}
Original: https://www.cnblogs.com/CodeLuckly/p/16859874.html
Author: CodeLuckly
Title: JAVA8-Lambda-List转Map
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/713681/
转载文章受原作者版权保护。转载请注明原作者出处!