Java流是否仅用于阵列?单元素呢?
我一直在研究Java流和函数式编程。Java流是否仅用于阵列?单元素呢?,java,functional-programming,java-stream,Java,Functional Programming,Java Stream,我一直在研究Java流和函数式编程。 想出了一个重写小“用户登录”代码的方法 这是我的登录方式 如果来自查询的用户为null,则在筛选器上处理null指针异常 公共响应登录(用户请求){ User dbUser=userRepo.findByEmail(request.getEmail()); 如果(!aes.matches(request.getPassword(),dbUser.getPassword())) 返回ResponseEntity.status(403.build(); 返回lo
想出了一个重写小“用户登录”代码的方法 这是我的登录方式
如果来自查询的用户为null,则在筛选器上处理null指针异常
公共响应登录(用户请求){
User dbUser=userRepo.findByEmail(request.getEmail());
如果(!aes.matches(request.getPassword(),dbUser.getPassword()))
返回ResponseEntity.status(403.build();
返回logUserIn(dbUser);
}
私有响应属性logUserIn(用户dbUser){
dbUser.setPassword(null);
setJwtCookie(dbUser);
返回ResponseEntity.ok(dbUser);
}
以及通过使用流
公共响应登录(用户请求){
返回Stream.of(userRepo.findByEmail(request.getEmail()))
.filter(dbUser->aes.matches(request.getPassword(),dbUser.getPassword()))
.map(this::logUserIn)
.findFirst()
.orElse(ResponseEntity.status(403.build());
}
私有响应属性logUserIn(用户dbUser){
dbUser.setPassword(null);
setJwtCookie(dbUser);
返回ResponseEntity.ok(dbUser);
}
我不知道溪流是否应该这样使用。是吗?如果我在项目中更重要的部分使用类似的逻辑,我以后会遇到麻烦吗?大多数情况下,你会遇到麻烦。“根本”问题是,两种编写方式都可以作为“最佳选择”进行辩护,而java社区大体上更倾向于第二种形式。出于同样的原因,像这样命名变量是个坏主意(社区决定惯例是像这样命名)。打破这种模式意味着你的代码更难被别人阅读,而别人编写的代码也更难为你阅读。此外,当您尝试与其他代码交互时,可能会遇到摩擦 例如,现在(以及在可预见的未来),“lambdas”(那些带有
:
和->
的东西)不是异常透明的,不是控制流透明的,也不是可变局部变量透明的
这里只有3个可行的选择:
java.*
开始,它不是为那种代码风格设计的AtomicX
变量,使用此类结构传输异常和布尔标志,以在外部执行中断和继续控制流,ETETERTA。这只是在写难看的代码,只是因为你特别不喜欢你那漂亮的新闪亮的锤子,坚持把所有问题都当作钉子来处理,不是吗那是。。试图猜测当你与其他代码和其他程序员交互时会发生什么。这个片段,在真空中,只有你?嗯,两个都很好。不管你喜欢什么,如果社区的话,与其他代码的摩擦,以及保持一致的风格都无关紧要。你会遇到麻烦,大多数情况下。“根本”问题是,两种编写方式都可以作为“最佳选择”进行辩护,而java社区大体上更倾向于第二种形式。出于同样的原因,像这样命名变量是个坏主意(社区决定惯例是像这样命名)。打破这种模式意味着你的代码更难被别人阅读,而别人编写的代码也更难为你阅读。此外,当您尝试与其他代码交互时,可能会遇到摩擦 例如,现在(以及在可预见的未来),“lambdas”(那些带有
:
和->
的东西)不是异常透明的,不是控制流透明的,也不是可变局部变量透明的
这里只有3个可行的选择:
java.*
开始,它不是为那种代码风格设计的AtomicX
变量,使用此类结构传输异常和布尔标志,以在外部执行中断和继续控制流,ETETERTA。这只是在写难看的代码,只是因为你特别不喜欢你那漂亮的新闪亮的锤子,坚持把所有问题都当作钉子来处理,不是吗if (!aes.matches(request.getPassword(), dbUser.getPassword())) {
return ResponseEntity.status(403).build();
}
else {
return logUserIn(dbUser);
}
return userRepo.findByEmail(request.getEmail()).map(dbUser -> {
if (!aes.matches(request.getPassword(), dbUser.getPassword())) {
return ResponseEntity.status(403).build();
}
else {
return logUserIn(dbUser);
}
})... // .orElse(null) / .orElseThrow(...)