java中Collectors.toMap() 方法使用技巧
java中Collectors.toMap() 方法使用技巧
Collectors.toMap() 方法是把List转Map的操作。
代码
public static void main(String[] args) { List<Employee> employeeList = Arrays.asList( new Employee(101, "张三", 18, 9999.99), new Employee(102, "李四", 59, 6666.66), new Employee(103, "王五", 28, 3333.33), new Employee(104, "赵六", 8, 7777.77) ); /** * id作为Map的key,name作为value的集合 * */ Map<Integer, String> collect1 = employeeList.stream().collect(Collectors.toMap(Employee::getId, Employee::getName)); System.out.println(collect1);//{101=张三, 102=李四, 103=王五, 104=赵六} /** * id作为map的集合,Employee对象作为Map的value */ Map<Integer, Employee> collect2 = employeeList.stream().collect(Collectors.toMap(Employee::getId, t -> t)); System.out.println(collect2);//{101=Employee(id=101, name=张三, age=18, salary=9999.99), 102=Employee(id=102, name=李四, age=59, salary=6666.66), 103=Employee(id=103, name=王五, age=28, salary=3333.33), 104=Employee(id=104, name=赵六, age=8, salary=7777.77)} /** * id作为map的集合,Employee对象作为Map的value */ Map<Integer, Employee> collect3 = employeeList.stream().collect(Collectors.toMap(Employee::getId, Function.identity())); System.out.println(collect3);//{101=Employee(id=101, name=张三, age=18, salary=9999.99), 102=Employee(id=102, name=李四, age=59, salary=6666.66), 103=Employee(id=103, name=王五, age=28, salary=3333.33), 104=Employee(id=104, name=赵六, age=8, salary=7777.77)} }
在上面代码中,map的ID不能重复,如果重复就会报错,下面我们引入个重载方法。
/** * id作为Map的key,name作为value的集合。 如果ID相等,则返回第一个id的name */ Map<Integer, String> collect1 = employeeList.stream().collect(Collectors.toMap(Employee::getId, Employee::getName, (n1, n2) -> n1)); System.out.println(collect1); /** * id作为Map的key,name作为value的集合。 如果ID相等,则返回第一个id的Employee */ Map<Integer, Employee> collect2 = employeeList.stream().collect(Collectors.toMap(Employee::getId, t -> t, (n1, n2) -> n1)); System.out.println(collect2); /** * id作为Map的key,name作为value的集合。 如果ID相等,则返回第一个id的Employee */ Map<Integer, Employee> collect3 = employeeList.stream().collect(Collectors.toMap(Employee::getId, Function.identity(), (n1, n2) -> n1)); System.out.println(collect3);