webentwicklung-frage-antwort-db.com.de

Anweisungs-Lambda kann durch den Ausdruck Lambda ersetzt werden

Ich mache die Benutzer- und Einladungsvalidierung mit der optionalen Funktion

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

Allerdings färbt IntelliJ meine graue Rückgabe https://zapodaj.net/2f48b1a26c392.png.html .__ Wenn ich jedoch die Rücknahme entferne, wird mir klar, dass es keine Rückgabe https gibt : //zapodaj.net/37605f08165c9.png.html

Könnte jemand erklären, wie es funktioniert und worum geht es?

28
sdfsd

Ihre Aussage Lambda

param -> { return expression; }

kann in einen Ausdruck Lambda geändert werden:

param -> expression

Einfach ist es nicht? Beachten Sie, dass die geschweiften Klammern und das Semikolon entfernt werden müssen.

75
Seelenvirtuose

Manchmal fand ich es nützlich, das .__ zu verlassen. Klammern, wo sie sind, wenn der Codeblock lang genug ist (ich denke, er verbessert die Lesbarkeit)

In Android Studio können Sie die Warnung mit //noinspection CodeBlock2Expr zu Beginn der Methode lokal deaktivieren, wie im folgenden Beispiel gezeigt

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