代码之家  ›  专栏  ›  技术社区  ›  uma

如何修复Java8中的“Lambdas应替换为方法引用”sonar问题?

  •  4
  • uma  · 技术社区  · 6 年前
    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());
    }
    

    我将上述代码转换为Java8LAMDA函数,如下所示。

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

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

    2 回复  |  直到 5 年前
        1
  •  4
  •   sweet suman    6 年前

    你的lambda,

    .map(input -> new NurseViewPrescriptionWrapper(input))
    

    可以用

    .map(NurseViewPrescriptionWrapper::new)
    

    NurseViewPrescriptionWrapper::new

        2
  •  3
  •   Naman    6 年前

    如果您有合适的构造函数,只需将语句替换为:

    public static Set<NurseViewPrescriptionWrapper> create(final Set<NurseViewPrescriptionDTO> nurseViewPrescriptionDTOs) {
        return nurseViewPrescriptionDTOs.stream()
                                .map(NurseViewPrescriptionWrapper::new)
                                .collect(Collectors.toSet());
    }