Java 收集实体流
Java Stream to Collect Entity
我有一个方法 return 用户实体,
我正在尝试映射它们并将其收集到 Spring 核心 API、UserDetails。
User user = userRepository.findByName(userName);
Optional.ofNullable(user)
.map(a -> new org.springframework.security.core.userdetails.User(a.getName(),
a.getPassword(), new ArrayList<>())).stream()
.collect(Collectors.toList())
以上returns List<UserDetails>
但在我的例子中,我想收集它的UserDetails实体(1项)和findByName()可能return NULL,在这种情况下我需要抛出自定义异常。
有什么办法可以处理这种情况吗?
您不必要地将可选的转换为流。您需要做的就是从可选的值中读取值:
org.springframework.security.core.userdetails.User userDetails =
Optional.ofNullable(user)
.map(a -> new org.springframework.security.core.userdetails.User(a.getName(),
a.getPassword(), new ArrayList<>()))
.orElse(null); //null returned if optional is empty.
if
是你的朋友。
User user = userRepository.findByName(userName);
org.springframework.security.core.userdetails.User springUser = null;
if (user != null) {
springUser = new org.springframework.security.core.userdetails.User(user.getName(),
user.getPassword(), new ArrayList<>());
}
请注意,您的存储库不应 return 为空。它应该 return 一个可选的。这就是 Optional 的用途:表示一个方法可以 return 一个不存在的值。不要滥用 Optional 来替换 null 检查。如果它 return 是可选的,那么您可以使用
springUser = optionalUser.map(...).orElse(null);
我有一个方法 return 用户实体,
我正在尝试映射它们并将其收集到 Spring 核心 API、UserDetails。
User user = userRepository.findByName(userName);
Optional.ofNullable(user)
.map(a -> new org.springframework.security.core.userdetails.User(a.getName(),
a.getPassword(), new ArrayList<>())).stream()
.collect(Collectors.toList())
以上returns List<UserDetails>
但在我的例子中,我想收集它的UserDetails实体(1项)和findByName()可能return NULL,在这种情况下我需要抛出自定义异常。
有什么办法可以处理这种情况吗?
您不必要地将可选的转换为流。您需要做的就是从可选的值中读取值:
org.springframework.security.core.userdetails.User userDetails =
Optional.ofNullable(user)
.map(a -> new org.springframework.security.core.userdetails.User(a.getName(),
a.getPassword(), new ArrayList<>()))
.orElse(null); //null returned if optional is empty.
if
是你的朋友。
User user = userRepository.findByName(userName);
org.springframework.security.core.userdetails.User springUser = null;
if (user != null) {
springUser = new org.springframework.security.core.userdetails.User(user.getName(),
user.getPassword(), new ArrayList<>());
}
请注意,您的存储库不应 return 为空。它应该 return 一个可选的。这就是 Optional 的用途:表示一个方法可以 return 一个不存在的值。不要滥用 Optional 来替换 null 检查。如果它 return 是可选的,那么您可以使用
springUser = optionalUser.map(...).orElse(null);