语句lambda可以用表达式lambda替换

sdf*_*fsd 55 java lambda spring spring-mvc optional

我使用Optional工具进行用户和邀请验证

@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"));
Run Code Online (Sandbox Code Playgroud)

但是,IntelliJ正在着色我的灰色返回 https://zapodaj.net/2f48b1a26c392.png.html 但是当我删除返回时,它向我突出显示没有返回https://zapodaj.net/37605f08165c9.png.html

有人可以解释它是如何工作的以及它的全部内容?

See*_*ose 120

你的陈述lambda

param -> { return expression; }
Run Code Online (Sandbox Code Playgroud)

可以更改为表达式lambda:

param -> expression
Run Code Online (Sandbox Code Playgroud)

简单,不是吗?请注意,需要删除大括号和分号.

  • 在这种情况下没有_更好_。随心所欲。但对我来说,这两个代码片段都不可读。这应该始终是编码的第一个标准。 (2认同)

Mat*_*Pag 5

有时我发现如果代码块足够长,将大括号保留在原处很有用(我认为这可以提高可读性)

//noinspection CodeBlock2Expr在 Android Studio 中,您可以在方法开始时使用本地禁用警告,如下例所示

//noinspection CodeBlock2Expr
button.setOnClickListener((View v) -> {
        //a long single method call...
});
Run Code Online (Sandbox Code Playgroud)