我們都知道java8的stream 是通過函數(shù)式接口實現(xiàn)的
下面的例子實現(xiàn)一個分頁的函數(shù)式接口
public interface PaginationInterface {
/**
*
* @param func1 獲取數(shù)據(jù)函數(shù)
* @param func2 map每頁的結(jié)果
* @param needResult 是否需要查詢之后的結(jié)果
* @param <T> 結(jié)果類型
* @param <R> 結(jié)果
* @return
*/
default <T, R> List<R> pagination(Function<Integer, Page<T>> func1, Function<Page<T>, List<R>> func2,
boolean needResult) {
int page = 0;
List<R> result = new ArrayList<>();
Page<T> sub;
do {
sub = func1.apply(page);
if (needResult) {
result.addAll(func2.apply(sub));
} else {
func2.apply(sub);
}
page++;
} while (sub.hasNext());
return result;
}
}
使用的時候只需要
pagination(i -> dataRepository.findAll(PageRequest.of(i, SIZE)), this::handle, false);
具體每頁的處理只需要放到handle函數(shù)中