Java 使用ListUtils对List分页处理
背景分析
??工作中,经常遇到需要用Java进行分页处理数据,例如把1000万条Excel数据写入MySQL数据库,如果把这1000w数据一股脑的丢给MySQL,保证把数据库玩完,故需要批量写入,如每批次写入500条。这时候就可以使用ListUtils.partition了。
maven坐标
??commons-collections4和Guava两个jar包的坐标如下:
org.apache.commons
commons-collections4
4.4
com.google.guava
guava
31.0.1-jre
批处理List
??基于commons-collections4和Guava两个jar包,对java.util.List中海量数据进行分批处理的逻辑如下所示,请求参数都是传入List和每页处理的数据量:
public static void main(String[] args) {
List list =new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("Wiener");
batchDealData(list, 3);
batchDealByGuava(list, 3);
}
private static void batchDealData (List data, int batchNum) {
// commons-collections4
List> partitions = ListUtils.partition(data, batchNum);
partitions.stream().forEach(sublist -> {
System.out.println(sublist);
});
}
private static void batchDealByGuava (List data, int batchNum) {
// guava
List> partitions = Lists.partition(data, batchNum);
partitions.stream().forEach(sublist -> {
System.out.println(sublist);
});
}
??这种处理方法相对于手动分页,其优点显而易见,既可以降低代码复杂度,又可以提高开发效率。小编在《》中,介绍了一种通用分页方式,略显复杂,下面基于commons-collections4,优化其中的分页策略,代码如下:
private void batchDeal(List
小结
?? 你如果对于如何分页不熟练,使用如上分页技术进行处理,是不是很简单?如果你有更轻巧的方法,欢迎留言评论。