list转map
public Map<Long, String> getIdNameMap(List<Employee> Employees) {
return Employees.stream().collect(Collectors.toMap(Employee::getId, Employee::getUsername));
}
收集成实体本身map
public Map<Long, Employee> getIdEmployeeMap(List<Employee> Employees) {
return Employees.stream().collect(Collectors.toMap(Employee::getId, Employee -> Employee));
}
Employee -> Employee是一个返回本身的lambda表达式,其实还可以使用Function接口中的一个默认方法代替,使整个方法更简洁优雅:
public Map<Long, Employee> getIdEmployeeMap(List<Employee> Employees) {
return Employees.stream().collect(Collectors.toMap(Employee::getId, Function.identity()));
}
重复key的情况
代码如下:
public Map<String, Employee> getNameEmployeeMap(List<Employee> Employees) {
return Employees.stream().collect(Collectors.toMap(Employee::getUsername, Function.identity()));
}
这个方法可能报错(java.lang.IllegalStateException: Duplicate key),因为name是有可能重复的。toMap有个重载方法,可以传入一个合并的函数来解决key冲突问题:
public Map<String, Employee> getNameEmployeeMap(List<Employee> Employees) {
return Employees.stream().collect(Collectors.toMap(Employee::getUsername, Function.identity(), (key1, key2) -> key2));
}
指定具体返回哪种map
toMap还有另一个重载方法,可以指定一个Map的具体实现,来收集数据:
public Map<String, Employee> getNameEmployeeMap(List<Employee> Employees) {
return Employees.stream().collect(Collectors.toMap(Employee::getUsername, Function.identity(), (key1, key2) -> key2, LinkedHashMap::new));
}
list<对象>转List<对象属性>
public List<Long> getList(List<Employee> updateList) {
return updateList.stream().map(Employee::getEmployeeId).collect(Collectors.toList());
}