作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 User
列表,我想将其转换为 Id
和 User
的 Map。但是,列表可以为空,所以如果我使用 Stream 转换它会抛出异常。
public Map<Long, User> getUserMap() {
List<User> users = getUserList(); //the method getUserList() can
// return null and this method can not be further changed
return users.stream()
.collect(Collectors.toMap(User::getId, user - > user)));
//throwing nullPointerException when users is null
}
我考虑将返回类型更改为 Optional,而不是返回空 Map。在下文中,在我看来,如果我已经使用了 Optional,也许整个操作可以链接到类似于 Stream 操作的一行中,而不是进行 if else null 检查。这可能吗?
public Optional<Map<Long, User>> getUserMap() {
List<User> users = getUserList(); //the method getUserList() can return null
if (users == null) {
return Optional.empty();
} else {
return Optional.of(users.stream()
.collect(Collectors.toMap(User::getId, user - > user)));
}
}
//not working
public Optional<Map<Long, User>> getUserMap() {
List<User> users = getUserList(); //the method getUserList() can return null
return Optional.ofNullable(users)
.stream()
.collect(Collectors.toMap(User::getId, user -> user));
}
最佳答案
你说:
I have a list of User where I want to convert it into a Map of Id and User. However, the list can be null, so if I use Stream to convert it will throw exception
因此,与其走 Optional
路线,不如使用返回填充的 List
或 null 而不是空列表的调用方法来解决您的原始问题。您可以轻松地将任何收到的 null 替换为空列表。如果您这样做,您的原始方法将根据您的需要生成一个空 map 。
改变这个:
List<User> users = getUserList();
……对此:
List<User> users = Objects.requireNonNullElse( getUserList() , List.of() ) ; // Now `users` is never null.
这消除了空到达和破坏基于流的代码的可能性。
关于java - 将列表转换为可选的 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69250998/
我正在尝试用 Swift 编写这段 JavaScript 代码:k_combinations 到目前为止,我在 Swift 中有这个: import Foundation import Cocoa e
我是一名优秀的程序员,十分优秀!