内存分页-Java

622 阅读1分钟

方式一: stream流数据处理skip、limit方法 实现内存分页

  1. stream skip跳行方法
//skip:跳跃 从第几个开始 下标从0开始

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8);
System.out.println("原始数据是:" + list);
//stream skip跳行方法
list.stream().skip(1).forEach(s-> System.out.println(s));

结果

原始数据是:[1, 2, 3, 4, 5, 6, 7, 8]
2
3
4
5
6
7
8

  1. stream limit限行方法
list.stream().limit(2).forEach(t -> System.out.println(t));

结果:

1
2
  1. skip 和 limit 组合 实现内存分页
list.stream().skip(2).limit(3).forEach(t -> System.out.print(t + "\t"));

结果 ` skip 和 limit 组合 实现内存分页 3 4 5

推荐内存分页

records = records.stream().skip((pageNum - 1) * pageSize).limit(pageSize ).collect(Collectors.toList());

/**

  • Description: 内存分页

  • @param records 待分页的数据
  • @param pageNum 当前页码
  • @param pageSize 每页显示的条数
  • @return 分页之后的数据 */ public static List pagination(List records, int pageNum, int pageSize) { if (CollectionUtils.isEmpty(records)) { return Collections.emptyList(); } if (pageNum < 0 || pageSize < 0) { return Collections.emptyList(); } int totalCount = records.size(); int pageCount; int remainder = totalCount % pageSize; if (remainder > 0) { pageCount = totalCount / pageSize + 1; } else { pageCount = totalCount / pageSize; } System.out.println("总记录数为:"+totalCount+" 当前页码为:"+pageNum+" 每页显示的条数为:" + + + pageSize); if (remainder == 0) { records = records.stream().skip((pageNum - 1) * pageSize).limit(pageSize * pageNum).collect(Collectors.toList()); return records; } else { //最后一页 if (pageNum == pageCount) { records = records.stream().skip((pageNum - 1) * pageSize).limit(totalCount).collect(Collectors.toList()); return records; } else { records = records.stream().skip((pageNum - 1) * pageSize).limit(pageSize ).collect(Collectors.toList()); return records; } } }

public static void main(String[] args) { List list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12); System.out.println("原始数据是:" + list);

int pageNum = 3;
int pageSize = 5;
list = list.stream().skip((pageNum - 1) * pageSize).limit(pageSize).collect(Collectors.toList());
System.out.println(list);
list.forEach(s -> System.out.println(s.intValue()));

}

其他内存分页

```
      list.clear();
    for (List<T> listTemp : defaultListMap.values()) {
        list.addAll(listTemp);
    }
    //筛选

        list.removeIf(p -> !Objects.equals(p.getBusinessType(), request.getBusinessType()));
    }
    //总数量
    if (Objects.equals(request.getReturnNum(), true)) {
        response.setTotalNum(list.size());
    }
    //分页及排序处理
    list = list.stream().sorted(Comparator.comparing(T::getF).reversed()).collect(Collectors.toList());
    int start = 0;
        if (request.getPageNumber() > 1) {
            start = ((request.getPageNumber() - 1) * request.getPageSize());
        }
        if (list.size() <= ((request.getPageNumber() - 1) * request.getPageSize())) {
            list = new ArrayList<>();
        } else if (list.size() >= request.getPageNumber() * request.getPageSize()) {
            list = list.subList(start, request.getPageNumber() * request.getPageSize() - 1);
        } else {
            list = list.subList(start, list.size());
        }
    
}

response.setFormConfigs(list);
```