Как отобразить последний элемент с помощью modelmapper в Java? - PullRequest
1 голос
/ 26 февраля 2020

Я использую приведенный ниже конвертер для преобразования объекта в 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);
...