如何在 Java 上使用另一个 Page 创建 Page<> 对象?

How to create Page<> object by using another Page on Java?

我正在使用 jpa 分页并获取 Page 对象,但我想 return 在对 SkcDto 进行一些操作后将另一种类型的 Page 对象添加到前端。我已经有从 SkcDto

创建 IQRecordResultDTO 数组的操作
private IQRecordResultDTO[] generateIQRecords(List<SkcDTO> iqList) {

//Some operations

return iQRecordResultDTO[];
}

下面是调用上述转换代码的代码:

public Page<SkcDTO> generateIQRecordsPage(Query query, Pageable pageable) {
    Page<SkcDTO> skcDTOPage = skcService.iqRecordsByCriteriaAsPage(query, pageable);

    List<SkcDTO> skcList = skcDTOPage.getContent();

    IQRecordResultDTO[] resultArray = generateIQRecords(skcList);

    //HERE IS WHAT I WANT AND NEED TO BE CHANGE I THINK. OR JUST SET NEW CONTENT[] AND ALL OTHER STUFF WILL BE SAME LIKE PAGENUMBER, TOTAL ELEMENT ETC.
    Page<IQRecordResultDTO> iqResultPage = skcDTOPage.map(skc -> {
        IQRecordResultDTO resultDto = convertSkcToIQResultDTO(skc);
        return resultDto;
    });

    return skcDTOPage;
}

我已经成功地创建了页面,但是如果我对这个页面应用分页,然后我在另一个页面上进行分页,结果就会出错。所以我只想 return 更正 Page 对象的类型,一切都将相同(页码、totalPage、totalElement 等)但是对象的 content[] 将被设置到另一种类型。

我找不到类似“只需复制页面,包括除 content[] 之外的所有元素”之类的内容

不确定我是否真的理解你想问的问题,因为看起来你已经根据你问题的代码弄明白了...

考虑到您已经有了 Page<SkcDTO> ,并且您想将其转换为 Page<IQRecordResultDTO> 。您首先需要有一个函数来定义如何将一个 SkcDTO 转换为一个 IQRecordResultDTO :

public IQRecordResultDTO toIQRecordResultDTO(SkcDTO skc){
    
}

然后你可以简单地使用Page.map()来转换它:

Page<SkcDTO> skcPage = .........
Page<IQRecordResultDTO> result = skcPage.map(skc->toIQRecordResultDTO(skc));

尝试:

Page<IQRecordResultDTO> iqResultPage = new PageImpl<IQRecordResultDTO>(
                Arrays.asList(generateIQRecords(skcDTOPage.getContent())), 
                skcDTOPage.getPageable(),
                skcDTOPage.getTotalElements()
);