需求
将一个用户List转成以userName为Key,user本身为value的Map。
常规写法
public static Map<String,SysUser> userList2Map(List<SysUser> userList) {
if (userList == null || userList.size() == 0){
return new HashMap<>();
}
Map<String,SysUser> userMap = new HashMap<>(userList.size());
for (SysUser user:userList){
userMap.put(user.getUserName(),user);
}
return userMap;
}
刚学Stream流后的写法
public static Map<String,SysUser> List2Map(List<SysUser> userList) {
return userList.stream().distinct().collect(Collectors.toMap(new Function<SysUser, String>() {
public String apply(SysUser user) {
return user.getUserName();
}
}, new Function<SysUser, SysUser>() {
public SysUser apply(SysUser user) {
return user;
}
}));
}
又学了拉姆达表达式后的写法
public static Map<String,SysUser> List2Map(List<SysUser> userList) {
return userList.stream()
.distinct()
.collect(Collectors.toMap(user1 -> user1.getUserName(), user -> user));
}
还学了方法引用后的写法
public static Map<String,SysUser> List2Map(List<SysUser> userList) {
return userList.stream()
.distinct()
.collect(Collectors.toMap(SysUser::getUserName, user -> user));
}
又看了Function.identity()后的写法
public static Map<String,SysUser> List2Map(List<SysUser> userList) {
return userList.stream()
.distinct()
.collect(Collectors.toMap(SysUser::getUserName,Function.identity()));
}
高端的食材往往只需要最朴素的烹饪法方式!
如果只是简单的需求,还是最原始的写法清晰明了!
后面的写法只是为了方便学习stream流的使用,让自己能看懂其他卷王写的“优秀”代码
Function.identity()
是Function类一个静态方法,作用就是返回参数自己,上面的例子中,传入user,返回的也是user本身,所以可以直接使用Function.identity()
/**
* Returns a function that always returns its input argument.
*
* @param <T> the type of the input and output objects to the function
* @return a function that always returns its input argument
*/
static <T> Function<T, T> identity() {
return t -> t;
}