it-roy-ru.com

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

Я делаю проверку пользователей и приглашений, используя опцию

@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 окрашивает мой серый возврат https://zapodaj.net/2f48b1a26c392.png.html Но когда я удаляю возврат, он подчеркивает, что возврата нет https : //zapodaj.net/37605f08165c9.png.html

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

28
sdfsd

Ваше заявление лямбда

param -> { return expression; }

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

param -> expression

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

75
Seelenvirtuose

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

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

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