Stream把List集合对象转化为Map方法

Posted 醉酒的小男人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Stream把List集合对象转化为Map方法相关的知识,希望对你有一定的参考价值。

Function.identity()

Function是一个接口,那么Function.identity()是什么意思呢?解释如下:

Java 8允许在接口中加入具体方法。接口中的具体方法有两种,default方法和static方法,identity()就是Function接口的一个静态方法。
Function.identity()返回一个输出跟输入一样的Lambda表达式对象,等价于形如t -> t形式的Lambda表达式。

identity() 方法JDK源码如下:

static  Function identity() {
    return t -> t;
}

User类

package com;

public class User {
    private String id;
    private String name;
    private Integer age;

    public User(){

    }

    public User(String id, String name, Integer age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
                "id='" + id + '\\'' +
                ", name='" + name + '\\'' +
                ", age=" + age +
                '}';
    }
}

方法一

package com;

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

public class StreamTest {
    public static void main(String[] args) {
        List<User> userList = new ArrayList<>();
        userList.add(new User("1","aaa",10));
        userList.add(new User("2","bbb",20));
        userList.add(new User("3","ccc",30));

        Map<String,User> userMap = userList.stream().collect(Collectors.toMap(User::getId, Function.identity()));
        System.out.println(userMap);
    }
}

方法二

package com;

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

public class StreamTest {
    public static void main(String[] args) {
        List<User> userList = new ArrayList<>();
        userList.add(new User("1","aaa",10));
        userList.add(new User("2","bbb",20));
        userList.add(new User("3","ccc",30));

        Map<String,User> userMap = userList.stream().collect(Collectors.toMap(User::getId, user->user));
        System.out.println(userMap);
    }
}

Map里的坑

package com;
import java.util.HashMap;
import java.util.Map;

public class MapTest {
    public static void main(String[] args) {
        Map<String,String> map = new HashMap<>();
        map.put("1","aaa");
        map.put("1","bbb");
        System.out.println(map.get(1));
    }
}



他是鸡肋,可以存放所有类型,一定要小心

以上是关于Stream把List集合对象转化为Map方法的主要内容,如果未能解决你的问题,请参考以下文章

java 怎么把对象集合转换成json

如何把json字符串转化为list

xml转为Map集合以及对象转化为xml

java8 .stream().sorted().filter().map().collect()用法

list中是map,stream如何拿到key集合

java8 Lambda Stream collect Collectors 常用实例