gpt4 book ai didi

java - 将列表转换为可选的 map

转载 作者:行者123 更新时间:2023-12-04 14:03:35 24 4
gpt4 key购买 nike

我有一个 User 列表,我想将其转换为 IdUser 的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com