首页 > 解决方案 > 以最有效和可读的方式进行条件初始化

问题描述

有条件地初始化 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之前nullempty()之前进行验证userService.getUsers()

标签: javaif-statementinitializationjava-streamternary-operator

解决方案


我会完全放弃条件。如果您流式传输一个空列表并将其收集到地图中,您将得到一个空地图:

Map<String, User> userMap = 
    userService.getUsers(userIdList)
               .stream()
               .collect(Collectors.toMap(UserDto::getUserName, Function.identity()));

推荐阅读