java中Collectors.toMap() 方法简单使用

113 阅读2分钟

1.controller类

public static void main(String[] args) {
        List<Employee> employeeList = Arrays.asList(
                new Employee(101, "张三",  Arrays.asList("111", "222")),
                new Employee(102, "赵六",  Arrays.asList("456", "124"))
                new Employee(102, "马七",  Arrays.asList("111", "222"))
        ); 
        
        /**
         * id作为Map的key,name作为value的集合,id不能重复
         * */
        Map<Integer, String> collect1 = employeeList.stream().collect(Collectors.toMap(Employee::getId, Employee::getName));
        System.out.println("collect1:"+collect1);
        //collect1:{101=张三, 102=赵六}
        /**
         * id作为map的集合,Employee对象作为Map的value,id不能重复
         */
        Map<Integer, Employee> collect2 = employeeList.stream().collect(Collectors.toMap(Employee::getId, t -> t));
        System.out.println("collect2:"+collect2);
        //collect2:{101=Employee(id=101, name=张三, ids=[111, 222]), 102=Employee(id=102, name=赵六, ids=[456, 124])}
        /**
         * id作为map的集合,Employee对象作为Map的value,id不能重复
         */
        Map<Integer, Employee> collect3 = employeeList.stream().collect(Collectors.toMap(Employee::getId, Function.identity()));
        System.out.println("collect3:"+collect3);
        //collect3:{101=Employee(id=101, name=张三, ids=[111, 222]), 102=Employee(id=102, name=赵六, ids=[456, 124])}
        }
        /**
         * id作为Map的key,name作为value的集合。 如果ID相等,则返回第一个id的name
         */
        Map<Integer, String> collect4 = employeeList.stream().collect(Collectors.toMap(Employee::getId, Employee::getName, (n1, n2) -> n1));
        System.out.println("collect4:"+collect4);
        //collect4:{101=张三, 102=赵六}
        /**
         * id作为Map的key,name作为value的集合。 如果ID相等,则返回第一个id的Employee
         */
        Map<Integer, Employee> collect5 = employeeList.stream().collect(Collectors.toMap(Employee::getId, t -> t, (n1, n2) -> n2));
        System.out.println("collect5:"+collect5);
        //collect5:{101=Employee(id=101, name=张三, ids=[111, 222]), 102=Employee(id=102, name=马七, ids=[111, 222])}
        /**
         * id作为Map的key,name作为value的集合。 如果ID相等,则返回第一个id的Employee
         */
        Map<Integer, Employee> collect6 = employeeList.stream().collect(Collectors.toMap(Employee::getId, Function.identity(), (n1, n2) -> n2));
        System.out.println("collect6:"+collect6);
        //collect6:{101=Employee(id=101, name=张三, ids=[111, 222]), 102=Employee(id=102, name=马七, ids=[111, 222])}
        /**
         * 用ID做分组,取出所有的数据,ID可以重复,全部打印
         */
        Map<Integer, List<Employee>> collect7 = employeeList.stream().collect(Collectors.groupingBy(Employee::getId));
        System.out.println("collect7:"+collect7);
        //collect7:{101=[Employee(id=101, name=张三, ids=[111, 222])], 102=[Employee(id=102, name=赵六, ids=[456, 124]), Employee(id=102, name=马七, ids=[111, 222])]}
        /**
         * 集合中的数组为string类型
         */
        employeeList.forEach(a -> System.out.println(String.join(",", a.getIds())));
        //111,222
        //456,124
        //111,222

2.entity类

@Data
public class Employee {
    private int id;
    private String name;
    private List<String> ids;

    public Employee(int id, String name, List<String> ids) {
        this.id = id;
        this.name = name;
        this.ids = ids;
    }
}