2017-09-15 179 views
6

我不使用可選設施聲明拉姆達可以表達拉姆達

@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

有人可以解釋它是如何工作的,它是什麼一回事?

回答

17

就這麼簡單:

你的陳述拉姆達

user -> { return expression; } 

可以改變一個表達式的λ:

user -> expression 

注意,即大括號和分號需除去。

+0

作品。謝謝。您認爲哪種方式更適合lambda https://pastebin.com/imEtjwHp或https://pastebin.com/gcaUMYQ4? – sdfsd

+0

在這種情況下沒有_better_。只要你喜歡就做。但對我而言,這兩個代碼片段都不可讀。這應該始終是編碼的第一個標準。 – Seelenvirtuose