我们都知道java8的stream 是通过函数式接口实现的
下面的例子实现一个分页的函数式接口
public interface PaginationInterface {
/**
*
* @param func1 获取数据函数
* @param func2 map每页的结果
* @param needResult 是否需要查询之后的结果
* @param <T> 结果类型
* @param <R> 结果
* @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函数中
网友评论