平凡也就两个字: 懒和惰;成功也就两个字: 苦和勤;优秀也就两个字: 你和我。跟着我从0学习JAVA、spring全家桶和linux运维等知识,带你从懵懂少年走向人生巅峰,迎娶白富美!每一篇文章都是心得总结,跟我学习你就是大牛!
两种List集合分页方式
工作中我们有时会遇到这种情况:我们需要保存一批List集合数据到数据库,但是由于list集合中的数据较多,可能会占用较大数据库内存,最终可能导致数据库锁表或宕机。
这种情况下,我们需要对数据库进行优化或者对list集合数据进行分批次处理。减小数据库的内存开销,提高性能。
1 普通分页
大多数同学会用下面的方式对list集合数据进行拆分分页。
1.1 手动分页
//分页大小 private static final int PAGE_SIZE = 5; /** * 手动分页 */ private static void splitList(Listlist) { int listSize = list.size(); int page = getPage(listSize); int fromIndex; int toIndex; //分页拆分集合 List> pageList = new ArrayList<>(); for (int i = 0; i < page; i++) { fromIndex = i * PAGE_SIZE; toIndex = (i + 1) * PAGE_SIZE; if (toIndex > listSize) { toIndex = listSize; } //截取一段集合数据 List subList = list.subList(fromIndex, toIndex); pageList.add(subList); } //循环打印看看 pageList.forEach(System.out::println); } /** * 获取分页 * @param listSize 总list大小 */ private static Integer getPage(int listSize) { int page = listSize / PAGE_SIZE; int surplus = listSize % PAGE_SIZE; if (0 != surplus) { page++; } return page; }
1.2 测试手动分页
public static void main(String[] args) { Listlist = Lists.newArrayList("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11"); //普通分页 splitList(list); }
String< list = Lists.newArrayList(\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\");\n //普通分页\n splitList(list);\n }","classes":[]}" >
测试结果:
2 使用guava工具对list进行拆分分页
本人推荐用现有的工具类来处理,可以减小代码量,提高代码可读性!
2.1 添加guava工具包依赖
<properties> <version.guava>21.0version.guava> properties> <dependency> <groupId>com.google.guavagroupId> <artifactId>guavaartifactId> <version>${version.guava}version> dependency>
!--guava通用工具包--dependencygroupId/groupIdartifactId/artifactIdversion/version/dependency
2.2 使用guava工具对list进行拆分分页
//分页大小 private static final int PAGE_SIZE = 5; /** * 使用guava工具对list进行拆分分页 */ private static void partitionList(Listlist) { //分页拆分集合 List<List> pageList = Lists.partition(list, PAGE_SIZE); //循环打印看看 pageList.forEach(System.out::println); }
2.3 测试guava分页
public static void main(String[] args) { Listlist = Lists.newArrayList("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11"); //guava工具对list进行拆分 partitionList(list); }
测试结果:
可见条条道路通罗马,但是站在巨人的肩膀上,何乐而不为呢!上面两种方法孰是孰非一目了然,你会用那种呢?
如果对你有疑问或需要技术支持,关注公众号联系我吧~