Заявление лямбда может быть заменено выражением лямбда

Я делаю проверку пользователей и приглашений с помощью Дополнительного средства

@DeleteMapping("/friends/{username}")
public
HttpEntity<Boolean> removeFriend(
        @ApiParam(value = "The user 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.

Может ли кто-нибудь объяснить, как это работает и для чего все это?

Ответ 1

Ваше утверждение лямбда

param -> { return expression; }

можно заменить на лямбда-выражение:

param -> expression

Просто, не правда ли? Обратите внимание, что фигурные скобки и точка с запятой должны быть удалены.

Ответ 2

  Иногда я находил полезным оставить скобки, где они находятся, если блок кода достаточно длинный (я думаю, что это улучшает читабельность)

В Android Studio вы можете локально отключить предупреждение, используя //noinspection CodeBlock2Expr в начале метода, как в примере ниже

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