集合分页copy工具类 PageUtil
package com.sss.common.database.util;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sss.common.database.vo.PageVO;
import com.sss.common.util.BeanUtil;
import com.sss.common.vo.EsPageVO;
import jakarta.validation.constraints.NotNull;
import java.util.function.BiFunction;
import java.util.function.Consumer;
public class PageUtil {
@NotNull
@SuppressWarnings("unused")
public static Integer getPages(long total, Integer pageSize) {
if (total == -1) {
return 1;
}
if (pageSize > 0) {
return (int) (total / pageSize + ((total % pageSize == 0) ? 0 : 1));
}
return 0;
}
@NotNull
public static <S, T> PageVO<T> copyPage(Page<S> page, Class<T> tClass) {
return copyPage(page, tClass, result -> {
});
}
@NotNull
public static <S, T> PageVO<T> copyPage(Page<S> page, Class<T> tClass, Consumer<T> consumer) {
PageVO<T> pageVO = new PageVO<>();
pageVO.setList(BeanUtil.copyList(page.getRecords(), tClass, consumer));
pageVO.setPages((int) page.getPages());
pageVO.setTotal(page.getTotal());
return pageVO;
}
public static <S, T> PageVO<T> copyPage(Page<S> page, Class<T> tClass, BiFunction<S, T, T> function) {
PageVO<T> pageVO = new PageVO<>();
pageVO.setList(BeanUtil.copyList(page.getRecords(), tClass, function));
pageVO.setPages((int) page.getPages());
pageVO.setTotal(page.getTotal());
return pageVO;
}
@NotNull
public static <S, T> EsPageVO<T> esCopyPage(@NotNull EsPageVO<S> page, Class<T> tClass) {
EsPageVO<T> pageVO = new EsPageVO<>();
pageVO.setList(BeanUtil.copyList(page.getList(), tClass));
pageVO.setPages(page.getPages());
pageVO.setTotal(page.getTotal());
return pageVO;
}
}
PageVO实体
package com.sss.common.database.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.apache.commons.compress.utils.Lists;
import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;
@Data
public class PageVO<T> implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@Schema(description = "总页数")
private Integer pages;
@Schema(description = "总条目数")
private Long total;
@Schema(description = "结果集")
private List<T> list;
public PageVO() {
this.pages = 0;
this.total = 0L;
this.list = Lists.newArrayList();
}
public PageVO(Integer pages, Long total, List<T> list) {
this.pages = pages;
this.total = total;
this.list = list;
}
public PageVO(Long pages, Long total, List<T> list) {
this.pages = BigDecimal.valueOf(pages).intValue();
this.total = total;
this.list = list;
}
}
BeanUtil 实体
package com.sss.common.util;
import jakarta.annotation.Nullable;
import java.util.ArrayList;
import java.util.List;
import java.util.function.BiFunction;
import java.util.function.Consumer;
public class BeanUtil extends cn.hutool.core.bean.BeanUtil {
@Nullable
public static <S, T> T copyProperties(S source, Class<T> tClass, BiFunction<S, T, T> function) {
T t = copyProperties(source, tClass);
if (t != null && function != null) {
t = function.apply(source, t);
}
return t;
}
public static <S, T> T copyProperties(S source, Class<T> tClass, @Nullable Consumer<T> consumer) {
T t = copyProperties(source, tClass);
if (t != null && consumer != null) {
consumer.accept(t);
}
return t;
}
public static <S, T> List<T> copyList(List<S> sources, Class<T> tClass) {
return copyList(sources, tClass, result -> {
});
}
public static <S, T> List<T> copyList(List<S> sources, Class<T> tClass, @Nullable Consumer<T> consumer) {
return copyList(sources, tClass, (src, target) -> {
if (consumer != null) {
consumer.accept(target);
}
return target;
});
}
public static <S, T> List<T> copyList(@Nullable List<S> sources, Class<T> tClass, BiFunction<S, T, T> function) {
if (sources == null) {
return null;
}
if (sources.isEmpty()) {
return new ArrayList<>();
}
List<T> list = new ArrayList<>(sources.size());
sources.forEach(src -> {
T t = copyProperties(src, tClass, function);
list.add(t);
});
return list;
}
}
EsPageVO 实体
package com.sss.common.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.List;
@Data
public class EsPageVO<T> implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@Schema(description = "总页数")
private Integer pages;
@Schema(description = "总条目数")
private Long total;
@Schema(description = "结果集")
private List<T> list;
}