基于Stream的分页
public static void main(String[] args) {
long pageSize = 5;
long pageNum = 1;
List<Integer> list = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10));
filterByPage1(list, pageNum, pageSize).forEach(System.out::print);
Predicate<CounterInfo> p = e -> e.getCounterCode().equals("1");
List<CounterInfo> counterInfos = new ArrayList<>();
filterByPage2(counterInfos, pageNum, pageSize, p).forEach(System.out::print);
}
public static <T> List<T> filterByPage1(List<T> list, long pageNum, long pageSize) {
return list.stream()
.skip(pageSize * (pageNum - 1))
.limit(pageSize)
.collect(Collectors.toList());
}
/**
* 筛选条件
*
* @param list 集合
* @param pageNum 页码
* @param pageSize 大小
*/
public static <T> List<T> filterByPage2(List<T> list, long pageNum, long pageSize, Predicate<T> function) {
return list.stream()
.filter(function)
.skip(pageSize)
.limit(pageSize * (pageNum - 1))
.collect(Collectors.toList());
}