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);

你可能感兴趣的:(研究,借鉴,java,开发语言)