jdk8 Convert List to Map

示例

 public void testListToMap() {
        List<User> users = new ArrayList<User>();
        users.add(new User("tom", 18, "男"));
        users.add(new User("lucy", 20, "女"));
        users.add(new User("诸葛亮", 21, "男"));
        users.add(new User("刘备", 20, "男"));

        Map<String, Integer> userAges = users.stream().collect(Collectors.toMap(User::getUsername, User::getAge));
        Set<Map.Entry<String, Integer>> entries = userAges.entrySet();
        entries.forEach(entry -> {
            System.out.println(entry.getKey() + ":" + entry.getValue());
        });

        /**
         * 重复key
         */
        Map<Integer, String> ageAndUser = users.stream().collect(Collectors.toMap(User::getAge, User::getUsername, (oldVal, newval) -> newval));
        Set<Map.Entry<Integer, String>> entrySet = ageAndUser.entrySet();
        entrySet.forEach(entry -> {
            System.out.println(entry.getKey() + "--" + entry.getValue());
        });

        /**
         * 收集实体本身
         */
        Map<String, User> nameUsers = users.stream().collect(Collectors.toMap(User::getUsername, user -> user));
        Set<Map.Entry<String, User>> entries1 = nameUsers.entrySet();
        entries1.forEach(entry -> {
            System.out.println(entry.getKey() + "+++" + entry.getValue());
        });
    }

输出

tom:18
刘备:20
诸葛亮:21
lucy:20
18--tom
20--刘备
21--诸葛亮
tom+++User{username='tom', age=18, sex='男'}
刘备+++User{username='刘备', age=20, sex='男'}
诸葛亮+++User{username='诸葛亮', age=21, sex='男'}
lucy+++User{username='lucy', age=20, sex='女'}
posted on 2019-12-15 16:56  溪水静幽  阅读(307)  评论(0)    收藏  举报