如何解决 java 8 中的“Lambdas 应替换为方法引用”声纳问题?

uma*_*uma 5 java lambda java-8 method-reference

public static Set<NurseViewPrescriptionWrapper> create(final Set<NurseViewPrescriptionDTO> nurseViewPrescriptionDTOs) {
  return nurseViewPrescriptionDTOs.stream()
      .map(new Function<NurseViewPrescriptionDTO, NurseViewPrescriptionWrapper>() {
        @Override
        public NurseViewPrescriptionWrapper apply(NurseViewPrescriptionDTO input) {
          return new NurseViewPrescriptionWrapper(input);
        }
      })
      .collect(Collectors.toSet());
}
Run Code Online (Sandbox Code Playgroud)

我将上面的代码转换为 java 8 lamda 函数,如下所示。

public static Set<NurseViewPrescriptionWrapper> create(final Set<NurseViewPrescriptionDTO> nurseViewPrescriptionDTOs) {
  return nurseViewPrescriptionDTOs.stream()
      .map(input -> new NurseViewPrescriptionWrapper(input))
      .collect(Collectors.toSet());
}
Run Code Online (Sandbox Code Playgroud)

现在,我收到声纳问题,例如Lambdas should be replaced with method references“->”这个符号。我该如何解决这个问题?

KaN*_*011 6

你的拉姆达,

.map(input -> new NurseViewPrescriptionWrapper(input))
Run Code Online (Sandbox Code Playgroud)

可以替换为

.map(NurseViewPrescriptionWrapper::new)
Run Code Online (Sandbox Code Playgroud)

该语法是方法引用语法。在这种情况下NurseViewPrescriptionWrapper::new,是引用构造函数的特殊方法引用