首页 > 解决方案 > 使用流替换值

问题描述

我有 Spring Data Entity,我在其中获得分页结果:

classItemsService.findAll(spec, pageable).map(classItemsMapper::toFullDTO);

使用 MapStrict 框架过滤从 API 返回的值:

@Mapper(config = BaseMapperConfig.class)
public interface ClassItemsMapper {

    ClassItemsFullDTO toFullDTO(ClassItems classItems);
}

DTO:

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder(toBuilder = true)
public class ClassItemsFullDTO {
    ........
    private String productVideo;
    ........
}

问题是我如何才能第二次替换从数据库返回的值,然后用一些硬编码的值替换。例如我想它应该是这样的:

Page<ClassItemsFullDTO> page = classItemsService.findAll(spec, pageable).map(classItemsMapper::toFullDTO).stream()
            .forEach(classItemsFullDTO -> classItemsFullDTO.setProductVideo("unsubscribed"));

你能帮我解决这个问题吗?

现在我得到这个问题:

Required type: Page <ClassItemsFullDTO>
Provided: void

标签: javajava-8java-stream

解决方案


Stream.forEach方法不返回任何东西,即它返回void. 所以你正在做的任务不适用于它。删除Page<ClassItemsFullDTO> page = 它会起作用。

如果您需要保留对结果的引用,我建议您不要使用Stream

Page<ClassItemsFullDTO> page = classItemsService.findAll(spec, pageable)
        .map(classItemsMapper::toFullDTO);

page.forEach(dto -> dto.setProductVideo("unsubscribed"));

推荐阅读