语句 lambda 可以替换为表达式 lambda
Posted
技术标签:
【中文标题】语句 lambda 可以替换为表达式 lambda【英文标题】:Statement lambda can be replaced with expression lambda 【发布时间】:2018-02-24 14:16:28 【问题描述】:我使用可选工具进行用户和邀请验证
@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
。
有人能解释一下它是如何工作的吗?
【问题讨论】:
【参考方案1】:你的语句 lambda
param -> return expression;
可以改为表达式lambda:
param -> expression
很简单,不是吗?注意,大括号和分号需要去掉。
【讨论】:
有效。谢谢。您认为哪个是 lambda 这个pastebin.com/imEtjwHp 或这个pastebin.com/gcaUMYQ4 的更好方法? 在这种情况下没有更好。随心所欲地做。但对我来说,这两个代码 sn-ps 都不可读。这应该始终是编码的首要标准。 @Seelenvirtuose 你介意给我们一个可读代码 sn-ps 的例子吗?【参考方案2】:有时我发现离开 如果代码块足够长,大括号就在哪里(我认为它提高了可读性)
在 android Studio 中,您可以在方法开始时使用 //noinspection CodeBlock2Expr
在本地禁用警告,如下例所示
//noinspection CodeBlock2Expr
button.setOnClickListener((View v) ->
//a long single method call...
);
【讨论】:
【参考方案3】:当我们在表达式 lambda 中使用花括号“”和分号“
;
”来实现功能接口时,会出现Statement lambda can be replaced with expression lambda
消息。在这种情况下,我们可以取消那些。话虽如此,我个人认为即使对于单行功能接口实现使用块 lambda 也是一种很好的编码实践,就像我们在单行 for
和 while
循环中那样。
【讨论】:
以上是关于语句 lambda 可以替换为表达式 lambda的主要内容,如果未能解决你的问题,请参考以下文章
Kotlin函数 ⑦ ( 内联函数 | Lambda 表达式弊端 | “ 内联 “ 机制避免内存开销 - 将使用 Lambda 表达式作为参数的函数定义为内联函数 | 内联函数本质 - 宏替换 )