了解Optional <T> .map()

Ole*_*Ole 5 java java-8 spring-data-jpa

查看使用Optional数据库调用首先加载可选项然后映射到Spring安全UserDetails实例的示例用法.代码如下所示:

Optional<User> user = userRepository.findByName(username);
user.orElseThrow(()-> new UsernameNotFoundException("Ahhh Shuckkkks!!!");
return user.map(CustomUserDetails::new).get();
Run Code Online (Sandbox Code Playgroud)

在最后一行中,该调用是相等的return new CustomUserDetails(user.get()).

也有人知道是否有更短的流动方式来编写上面的例子?

JB *_*zet 10

是的,这是等价的.但代码应该写成

return userRepository.findByName(username)
    .map(CustomUserDetails::new)
    .orElseThrow(()-> new UsernameNotFoundException("Ahhh Shuckkkks!!!"));
Run Code Online (Sandbox Code Playgroud)

这避免了一个无用的变量,在最后隔离了特殊情况,并避免了令人讨厌的调用get(),这只能保证在这里工作正常,因为你orElseThrow()之前已经调用过.