浏览代码

add Segment

Looly 5 年之前
父节点
当前提交
7633733cfe

+ 1 - 0
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)

+ 32 - 0
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;
+
 /**
  * 分页工具类
  *
@@ -136,6 +139,35 @@ public class PageUtil {
 	}
 
 	/**
+	 * 将页数和每页条目数转换为开始位置和结束位置<br>
+	 * 此方法用于包括结束位置的分页方法<br>
+	 * 例如:
+	 *
+	 * <pre>
+	 * 页码:0,每页10 =》 [0, 10]
+	 * 页码:1,每页10 =》 [10, 20]
+	 * ……
+	 * </pre>
+	 *
+	 * <p>
+	 * 当{@link #setFirstPageNo(int)}设置为1时:
+	 * <pre>
+	 * 页码:1,每页10 =》 [0, 10]
+	 * 页码:2,每页10 =》 [10, 20]
+	 * ……
+	 * </pre>
+	 *
+	 * @param pageNo   页码(从0计数)
+	 * @param pageSize 每页条目数
+	 * @return {@link Segment}
+	 * @since 5.5.3
+	 */
+	public static Segment<Integer> toSegment(int pageNo, int pageSize) {
+		final int[] startEnd = transToStartEnd(pageNo, pageSize);
+		return new DefaultSegment<>(startEnd[0], startEnd[1]);
+	}
+
+	/**
 	 * 根据总数计算总页数
 	 *
 	 * @param totalCount 总数

+ 14 - 1
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<Integer>, 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);
 	}