有条件地初始化Collection(在此示例中为Map)的最有效方法是什么?就最佳做法而言,您是否比其他解决方案更喜欢?
我提供了三种解决方案,我想请您提供反馈或意见。
第一
Map<String, User> userMap;
if (isNotEmpty(userIdList)) {
userService
.getUsers(userIdList)
.stream()
.collect(Collectors.toMap(UserDto::getUserName, Function.identity()));
} else {
userMap = new HashMap<>();
}
第二:
Map<String, User> userMap = new HashMap<>();
if (isNotEmpty(userIdList)) {
userService
.getUsers(userIdList)
.stream()
.collect(Collectors.toMap(UserDto::getUserName, Function.identity()));
}
第三:
Map<String, User> userMap = isNotEmpty(userIdList) ?
userService
.getUsers(userIdList)
.stream()
.collect(Collectors.toMap(UserDto::getUserName, Function.identity()))
: new HashMap<>();
这里的附加约束是,在使用userIdList
之前,您需要验证null
和empty()
的{{1}}
答案 0 :(得分:4)
我将完全删除该条件。如果您串流一个空列表并将其收集到地图上,则会得到一个空地图:
Map<String, User> userMap =
userService.getUsers(userIdList)
.stream()
.collect(Collectors.toMap(UserDto::getUserName, Function.identity()));
答案 1 :(得分:2)
初始化集合的最有效方法是什么?
如果没有Collections.emptyMap()
,我将使用userIdList
,如下所示。
Map<String, User> userMap;
if (isNotEmpty(userIdList)) {
userService
.getUsers(userIdList)
.stream()
.collect(Collectors.toMap(UserDto::getUserName, Function.identity()));
} else {
userMap = Collections.emptyMap();
}
使用Collections.emptyMap()
时,意图非常清晰且可读性强。
您可以查看Collection.emptyMap()
API here。
正如其他人已经提到的那样,Option(1)和Option(3)之间没有区别。
尽管如此,您不会在这件事上看到任何大的性能差异(除非您循环执行此操作)。如果性能是真正的问题,那么只需检查应用程序中是否存在其他真正的瓶颈。