>我使用可选工具进行用户和邀请验证
@DeleteMapping("/friends/{username}")
public
HttpEntity<Boolean> removeFriend(
@ApiParam(value = "The user's name", required = true) @PathVariable String username
) {
Long fromId = authorizationService.getUserId();
return userService.findByUsername(username)
.map(user -> {
return friendshipService.findFriendship(fromId, user.getId())
.map(friendship -> {
friendshipService.removeFriendship(friendship);
friendship.setToId(friendship.getFromId());
friendship.setFromId(friendship.getToId());
friendshipService.removeFriendship(friendship);
return ResponseEntity.ok(true);
}).orElseGet(() -> ResponseEntity.notFound().build());
}).orElseThrow(() -> new ResourceNotFoundException("User not found"));
然而,IntelliJ
正在为我的灰色return
着色,但是当我取下return
时,它向我强调没有return
。
有人可以解释一下它是如何工作的以及它的全部内容吗?
你的语句 lambda
param -> { return expression; }
可以更改为表达式 lambda:
param -> expression
很简单,不是吗?请注意,需要删除大括号和分号。
有时我发现离开 如果代码块足够长,则在它们所在的位置大括号(我认为它可以提高可读性)
在 Android Studio 中,您可以在方法开始时使用//noinspection CodeBlock2Expr
在本地禁用警告,如下例所示
//noinspection CodeBlock2Expr
button.setOnClickListener((View v) -> {
//a long single method call...
});
当我们在表达式 lambda 中使用大括号 "{}
" 和分号 ";
" 来实现函数接口时,会出现Statement lambda can be replaced with expression lambda
消息。我们可以消除那些处于这种情况的人。话虽如此,我个人认为,即使对于单行功能接口实现,使用块 lambda 也是一个很好的编码实践,就像我们对单行for
和while
循环所做的那样。
当可以使用表达式样式主体时,报告具有代码块主体的 lambda 表达式。转换的结果更短、更清晰。
例:
Comparable<String> c = o -> {return 0;};
应用快速修复后:
Comparable<String> c = o -> 0;