繁体   English   中英

Java Stream 收集实体

[英]Java Stream to Collect Entity

我有一个返回用户实体的方法,

我正在尝试将它们映射并将其收集到 Spring Core 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())

以上返回List<UserDetails>但在我的情况下,我想收集它 UserDetails 实体(1 项)并且 findByName() 可能返回 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<>());
}

请注意,您的 repo 不应返回 null。 它应该返回一个Optional。 这就是 Optional 的用途:表示方法可以返回不存在的值。 不要滥用 Optional 来替换空检查。 如果它返回一个 Optional,那么你可以使用

springUser = optionalUser.map(...).orElse(null);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM