From 7633733cfe65f53ef0be5d5ec8d6125791f3412d Mon Sep 17 00:00:00 2001 From: Looly Date: Tue, 8 Dec 2020 05:03:48 +0800 Subject: [PATCH] add Segment --- CHANGELOG.md | 1 + .../java/cn/hutool/core/util/PageUtil.java | 32 +++++++++++++++++++ .../src/main/java/cn/hutool/db/Page.java | 15 ++++++++- 3 files changed, 47 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 97a428e88..332b8d634 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ * 【cache 】 CacheObj的isExpired()逻辑修改(issue#1295@Github) * 【json 】 JSONStrFormater改为JSONStrFormatter * 【dfa 】 增加FoundWord(pr#1290@Github) +* 【core 】 增加Segment(pr#1290@Github) ### Bug修复 * 【cache 】 修复Cache中get重复misCount计数问题(issue#1281@Github) diff --git a/hutool-core/src/main/java/cn/hutool/core/util/PageUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/PageUtil.java index 59670070d..d56e95234 100644 --- a/hutool-core/src/main/java/cn/hutool/core/util/PageUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/util/PageUtil.java @@ -1,5 +1,8 @@ package cn.hutool.core.util; +import cn.hutool.core.lang.DefaultSegment; +import cn.hutool.core.lang.Segment; + /** * 分页工具类 * @@ -135,6 +138,35 @@ public class PageUtil { return new int[]{start, getEndByStart(start, pageSize)}; } + /** + * 将页数和每页条目数转换为开始位置和结束位置
+ * 此方法用于包括结束位置的分页方法
+ * 例如: + * + *
+	 * 页码:0,每页10 =》 [0, 10]
+	 * 页码:1,每页10 =》 [10, 20]
+	 * ……
+	 * 
+ * + *

+ * 当{@link #setFirstPageNo(int)}设置为1时: + *

+	 * 页码:1,每页10 =》 [0, 10]
+	 * 页码:2,每页10 =》 [10, 20]
+	 * ……
+	 * 
+ * + * @param pageNo 页码(从0计数) + * @param pageSize 每页条目数 + * @return {@link Segment} + * @since 5.5.3 + */ + public static Segment toSegment(int pageNo, int pageSize) { + final int[] startEnd = transToStartEnd(pageNo, pageSize); + return new DefaultSegment<>(startEnd[0], startEnd[1]); + } + /** * 根据总数计算总页数 * diff --git a/hutool-db/src/main/java/cn/hutool/db/Page.java b/hutool-db/src/main/java/cn/hutool/db/Page.java index 8841ee4a3..c524584b8 100644 --- a/hutool-db/src/main/java/cn/hutool/db/Page.java +++ b/hutool-db/src/main/java/cn/hutool/db/Page.java @@ -1,5 +1,6 @@ package cn.hutool.db; +import cn.hutool.core.lang.Segment; import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.PageUtil; import cn.hutool.db.sql.Order; @@ -12,7 +13,7 @@ import java.util.Arrays; * * @author Looly */ -public class Page implements Serializable { +public class Page implements Segment, Serializable { private static final long serialVersionUID = 97792549823353462L; public static final int DEFAULT_PAGE_SIZE = 20; @@ -159,15 +160,27 @@ public class Page implements Serializable { /** * @return 开始位置 + * @see #getStartIndex() */ public int getStartPosition() { + return getStartIndex(); + } + + @Override + public Integer getStartIndex() { return PageUtil.getStart(this.pageNumber, this.pageSize); } /** * @return 结束位置 + * @see #getEndIndex() */ public int getEndPosition() { + return getEndIndex(); + } + + @Override + public Integer getEndIndex() { return PageUtil.getEnd(this.pageNumber, this.pageSize); }