如何在 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()
);
我正在使用 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()
);