首页 > 编程语言 >JAVA8-Lambda-List转Map

JAVA8-Lambda-List转Map

时间:2022-11-05 11:44:22浏览次数:40  
标签:Map List 张三 list add k1 Student new JAVA8

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

相关文章