0
点赞
收藏
分享

微信扫一扫

同事写了段代码,差点没看懂,java1.8特性List转Map & Function.identity()

需求

将一个用户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>() {
@Override
public String apply(SysUser user) {
return user.getUserName();
}
}, new Function<SysUser, SysUser>() {
@Override
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;
}


举报

相关推荐

0 条评论