web-dev-qa-db-fra.com

L'instruction lambda peut être remplacée par l'expression lambda

Je fais la validation des utilisateurs et des invitations à l'aide de la fonction optionnelle

@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"));

Cependant, IntelliJ colore ma déclaration grise https://zapodaj.net/2f48b1a26c392.png.html Mais lorsque je supprime la déclaration, je constate qu’il n’ya pas de retour https://zapodaj.net/37605f08165c9.png.html

Quelqu'un pourrait-il expliquer comment cela fonctionne et de quoi s'agit-il?

28
sdfsd

Votre statement lambda

param -> { return expression; }

peut être changé en expression lambda :

param -> expression

Simple, n'est ce pas? Notez que les accolades et le point-virgule doivent être supprimés.

75
Seelenvirtuose

Parfois, je trouvais utile de quitter le accolades où ils sont si le bloc de code est assez long (je pense que cela améliore la lisibilité)

Dans Android Studio, vous pouvez désactiver localement l'avertissement à l'aide de //noinspection CodeBlock2Expr au début de la méthode, comme dans l'exemple ci-dessous.

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