Я использую приведенный ниже конвертер для преобразования объекта в DTO. Мое требование - получить последний комментарий / дату отзыва из списка комментариев / дат обзора и установить его в DTO. Но я должен конвертировать все комментарии в обзоре, и это немного излишне.
MappingUtil. java
Converter<List<SomeEntity>, List<SomeDTO>> converter = (ctx -> {
return ctx.getSource().stream().map(someEntity-> {
return convertEntityToDTO(someEntity);
}).collect(Collectors.toList());
});
mapper.using(converter).map(ParentEntity::getSomeEntities, ParentDTO::setSomeDTOs);
ParentDTO. java
private String lastReviewComments;
private String lastReviewDate;
public void setSomeDTOs(List<SomeDTO> someDTOs) {
final Optional<SomeDTO> someDTO = someDTOs.stream().reduce((first, second) -> second);
if (someDTO.isPresent()) {
this.lastReviewComments = someDTO.get().getReviewComments();
this.lastReviewDate = DDMMYYYY_DATE_FORMAT.format(someDTO.get().getReviewDate());
}
}
Как могу ли я изменить строку ниже
mapper.using(converter).map(ParentEntity::getSomeEntities, ParentDTO::setSomeDTOs);
, чтобы получить последний объект и установить последний комментарий и дату последнего обзора непосредственно в ParentDTO
?
Я попробовал код ниже, но он дает мне некоторые NullPointerException
.
mapper.map(src -> {
final Optional<SomeEntity> someEntity = src.getSomeEntities().stream().reduce((first, second) -> second);
return someEntity.isPresent() ? someEntity.get().getEmbeddedSubEntity().getReviewComments() : "";
}, SomeDTO::setLastReviewComments);
mapper.map(src -> {
final Optional<SomeEntity> someEntity = src.getSomeEntities().stream().reduce((first, second) -> second);
return someEntity.isPresent() ? DATE_FORMAT.format(someEntity.get().getEmbeddedSubEntity().getReviewDate()) : "";
}, SomeDTO::setLastReviewDate);