Ответ 1
Ваше утверждение лямбда
param -> { return expression; }
можно заменить на лямбда-выражение:
param -> expression
Просто, не правда ли? Обратите внимание, что фигурные скобки и точка с запятой должны быть удалены.
Я делаю проверку пользователей и приглашений с помощью Дополнительного средства
@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
.
Может ли кто-нибудь объяснить, как это работает и для чего все это?
Ваше утверждение лямбда
param -> { return expression; }
можно заменить на лямбда-выражение:
param -> expression
Просто, не правда ли? Обратите внимание, что фигурные скобки и точка с запятой должны быть удалены.
Иногда я находил полезным оставить скобки, где они находятся, если блок кода достаточно длинный (я думаю, что это улучшает читабельность)
В Android Studio вы можете локально отключить предупреждение, используя //noinspection CodeBlock2Expr
в начале метода, как в примере ниже
//noinspection CodeBlock2Expr
button.setOnClickListener((View v) -> {
//a long single method call...
});