语句 lambda 可以替换为表达式 lambda



>我使用可选工具进行用户和邀请验证

@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正在为我的灰色return着色,但是当我取下return时,它向我强调没有return

有人可以解释一下它是如何工作的以及它的全部内容吗?

你的语句 lambda

param -> { return expression; }

可以更改为表达式 lambda

param -> expression

很简单,不是吗?请注意,需要删除大括号和分号。

有时我发现离开 如果代码块足够长,则在它们所在的位置大括号(我认为它可以提高可读性)

在 Android Studio 中,您可以在方法开始时使用//noinspection CodeBlock2Expr在本地禁用警告,如下例所示

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

当我们在表达式 lambda 中使用大括号 "{}" 和分号 ";" 来实现函数接口时,会出现Statement lambda can be replaced with expression lambda消息。我们可以消除那些处于这种情况的人。话虽如此,我个人认为,即使对于单行功能接口实现,使用块 lambda 也是一个很好的编码实践,就像我们对单行forwhile循环所做的那样。

当可以使用表达式样式主体时,报告具有代码块主体的 lambda 表达式。转换的结果更短、更清晰。

例:

Comparable<String> c = o -> {return 0;};

应用快速修复后:

Comparable<String> c = o -> 0;

相关内容

  • 没有找到相关文章

最新更新