Как это исправить? Проблема с сонаром в java 8 должна быть заменена ссылками на метод. - PullRequest
0 голосов
/ 08 января 2019
 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());   }

Я конвертирую приведенный выше код в функцию лямда java 8, как показано ниже.

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

сейчас я получаю проблему с сонаром, например, «лямбды должны быть заменены ссылками на методы», чтобы «->» этот символ. Как я могу решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Учитывая, что у вас есть соответствующий конструктор, вы можете просто заменить свое выражение следующим образом:

public static Set<NurseViewPrescriptionWrapper> create(final Set<NurseViewPrescriptionDTO> nurseViewPrescriptionDTOs) {
    return nurseViewPrescriptionDTOs.stream()
                            .map(NurseViewPrescriptionWrapper::new)
                            .collect(Collectors.toSet());
}
0 голосов
/ 08 января 2019

Ваша лямбда,

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

можно заменить на

.map(NurseViewPrescriptionWrapper::new)

Этот синтаксис является справочным синтаксисом метода. В случае NurseViewPrescriptionWrapper::new это ссылка на специальный метод, который ссылается на конструктор

...