Skip to content

Commit 7cd3548

Browse files
committed
Page to PageInfo 时可以指定转换函数来转换 List 值的类型。
1 parent 95ac857 commit 7cd3548

File tree

2 files changed

+52
-11
lines changed

2 files changed

+52
-11
lines changed

src/main/java/com/github/pagehelper/Page.java

Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -352,13 +352,49 @@ public Page<E> countColumn(String columnName) {
352352
}
353353

354354
public PageInfo<E> toPageInfo() {
355-
PageInfo<E> pageInfo = new PageInfo<E>(this);
355+
return new PageInfo<E>(this);
356+
}
357+
358+
public <T> PageInfo<T> toPageInfo(Function<E, T> function) {
359+
List<T> list = new ArrayList<T>(this.size());
360+
for (E e : this) {
361+
list.add(function.apply(e));
362+
}
363+
PageInfo<T> pageInfo = new PageInfo<T>(list);
364+
pageInfo.setPageNum(this.getPageNum());
365+
pageInfo.setPageSize(this.getPageSize());
366+
pageInfo.setPages(this.getPages());
367+
pageInfo.setStartRow(this.getStartRow());
368+
pageInfo.setEndRow(this.getEndRow());
369+
pageInfo.calcByNavigatePages(PageInfo.DEFAULT_NAVIGATE_PAGES);
356370
return pageInfo;
357371
}
358372

359373
public PageSerializable<E> toPageSerializable() {
360-
PageSerializable<E> serializable = new PageSerializable<E>(this);
361-
return serializable;
374+
return new PageSerializable<E>(this);
375+
}
376+
377+
public <T> PageSerializable<T> toPageSerializable(Function<E, T> function) {
378+
List<T> list = new ArrayList<T>(this.size());
379+
for (E e : this) {
380+
list.add(function.apply(e));
381+
}
382+
return new PageSerializable<T>(list);
383+
}
384+
385+
/**
386+
* 兼容低版本 Java 7-
387+
*/
388+
public interface Function<E, T> {
389+
390+
/**
391+
* Applies this function to the given argument.
392+
*
393+
* @param t the function argument
394+
* @return the function result
395+
*/
396+
T apply(E t);
397+
362398
}
363399

364400
public <E> Page<E> doSelectPage(ISelect select) {

src/main/java/com/github/pagehelper/PageInfo.java

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
*/
4040
@SuppressWarnings({"rawtypes", "unchecked"})
4141
public class PageInfo<T> extends PageSerializable<T> {
42+
public static final int DEFAULT_NAVIGATE_PAGES = 8;
4243
//当前页
4344
private int pageNum;
4445
//每页的数量
@@ -87,7 +88,7 @@ public PageInfo() {
8788
* @param list
8889
*/
8990
public PageInfo(List<T> list) {
90-
this(list, 8);
91+
this(list, DEFAULT_NAVIGATE_PAGES);
9192
}
9293

9394
/**
@@ -124,13 +125,7 @@ public PageInfo(List<T> list, int navigatePages) {
124125
this.endRow = list.size() > 0 ? list.size() - 1 : 0;
125126
}
126127
if (list instanceof Collection) {
127-
this.navigatePages = navigatePages;
128-
//计算导航页
129-
calcNavigatepageNums();
130-
//计算前后页,第一页,最后一页
131-
calcPage();
132-
//判断页面边界
133-
judgePageBoudary();
128+
calcByNavigatePages(navigatePages);
134129
}
135130
}
136131

@@ -142,6 +137,16 @@ public static <T> PageInfo<T> of(List<T> list, int navigatePages) {
142137
return new PageInfo<T>(list, navigatePages);
143138
}
144139

140+
public void calcByNavigatePages(int navigatePages) {
141+
setNavigatePages(navigatePages);
142+
//计算导航页
143+
calcNavigatepageNums();
144+
//计算前后页,第一页,最后一页
145+
calcPage();
146+
//判断页面边界
147+
judgePageBoudary();
148+
}
149+
145150
/**
146151
* 计算导航页
147152
*/

0 commit comments

Comments
 (0)