【发布时间】:2018-12-26 03:40:46
【问题描述】:
当我在声纳中检查时,结果是:
Replace this lambda with a method reference.
其实指的是这个:
.filter(s -> aIDetailsDto.getResult().getIdNo().equals(s))
我下面的代码是这样的:
AIDetailsDto aIDetailsDto = aaaService
.getDetailsByUserId(userId)
if (!ObjectUtils.isEmpty(aIDetailsDto)) {
List<String> kvpValues = callService.getKVPCodes(NewConstants.REMOVED)
.stream()
.filter(s -> aIDetailsDto.getResult().getIdNo().equals(s))
我尝试更改它,但出现错误。 有谁知道如何改变它?
【问题讨论】:
-
s -> aIDetailsDto.getResult().getIdNo().equals(s)可以替换为aIDetailsDto.getResult().getIdNo()::equals,但这会降低 IMO 的可读性,我会抑制或忽略此处的声纳警告 -
@Eugene 我认为可读性与习惯有关。对我来说,使用
::equal对我来说是完全可读的,因为我已经习惯了。另一方面,每当我使用 any lambda 时,我的同事都会对我大喊大叫,因为他发现它非常难以阅读。 -
@Jai 不不,我确实更喜欢方法引用,但不是在 this 情况下
-
如果表达式是这样的,我该怎么做才能转换为方法引用:-
s -> aIDetailsDto.getResult().getIdNo().equals(s.getIdNo())
标签: java lambda java-8 sonarqube method-reference