有时会遇到将整个pageInfo全量转换为另一种类型的pageInfo的情况,虽然这样的使用常见很少,但是想着写一个util对类型进行转换。
import com.github.pagehelper.PageInfo;
import lombok.extern.slf4j.Slf4j;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* @author tanwentao
* @since 2021/11/26
*/
@Slf4j
public class PageUtil {
/**
* 通用pageInfo转换
*
* @param sourcePageInfo 源数据
* @param targetClass 目标类型
* @param mapper list转换方法
* @param <T> 目标类型
* @param <S> 源类型
* @return
*/
public static <T, S> PageInfo<T> pageInfoCopy(PageInfo<S> sourcePageInfo, Class<T> targetClass, Function<S, T> mapper) {
log.info("分页转换至{}", targetClass.getSimpleName());
PageInfo<T> respPageInfo = new PageInfo<>();
respPageInfo.setPageNum(sourcePageInfo.getPageNum());
respPageInfo.setPageSize(sourcePageInfo.getPageSize());
respPageInfo.setSize(sourcePageInfo.getSize());
respPageInfo.setStartRow(sourcePageInfo.getStartRow());
respPageInfo.setEndRow(sourcePageInfo.getEndRow());
respPageInfo.setPages(sourcePageInfo.getPages());
respPageInfo.setPrePage(sourcePageInfo.getPrePage());
respPageInfo.setNextPage(sourcePageInfo.getNextPage());
respPageInfo.setIsFirstPage(sourcePageInfo.isIsFirstPage());
respPageInfo.setIsLastPage(sourcePageInfo.isIsLastPage());
respPageInfo.setHasPreviousPage(sourcePageInfo.isHasPreviousPage());
respPageInfo.setHasNextPage(sourcePageInfo.isHasNextPage());
respPageInfo.setNavigatePages(sourcePageInfo.getNavigatePages());
respPageInfo.setNavigatepageNums(sourcePageInfo.getNavigatepageNums());
respPageInfo.setNavigateFirstPage(sourcePageInfo.getNavigateFirstPage());
respPageInfo.setNavigateLastPage(sourcePageInfo.getNavigateLastPage());
respPageInfo.setTotal(sourcePageInfo.getTotal());
List<T> pageList = sourcePageInfo.getList().stream().map(mapper).collect(Collectors.toList());
respPageInfo.setList(pageList);
return respPageInfo;
}
}
使用示例:
//调用 list 方法
PageInfo<SourceClazz> SourceClazzPageInfo = //TODO 源数据;
//转换为首页使用类型
PageInfo<TargetClazz> respPageInfo = PageUtil.pageInfoCopy(SourceClazzPageInfo , TargetClazz.class,
resp1 -> {
TargetClzz targetClazz = new TargetClzz();
//TODO list 内容转换
return targetClazz;
});