list集合分批处理数据

Posted wzy-525

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了list集合分批处理数据相关的知识,希望对你有一定的参考价值。

方法一

package com.nantian.winUtliTest.BaiWan;

import java.util.ArrayList;
import java.util.List;

/**
* 测试 百万数据 每次处理10w
* @ClassName: test
* @Description: TODO
* @author: 92649498
* @date: 2019年12月12日 下午4:14:00
* Class explain:
*/
public class test {
public static void main(String[] args) {
List<String> a = new ArrayList();//a的list 只是用来做计数
List<String> a1 = new ArrayList();//a的list 只是用来做计数
List b = new ArrayList();// 实际存储的数据
a1.add("b");
for (int i = 0; i < 100; i++) {
System.out.println("a1"+a.size());
a.add(i, a1.get(0)+i);
}





for (int i = 1; i < a.size() + 1; i++) {
b.add(a.get(i - 1));
if (i % 10 == 0) {//每次每次处理
System.out.println("每次处理100000W "+i + "-- 处理黑名单的数据" + b);

b.clear();
}

if (i == a.size()) {
System.out.println(i + "--" + b);
// 最后一批
b.clear();
}

}
}





}

 方法二

package com.nantian.winUtliTest.BaiWan;

import java.util.ArrayList;
import java.util.List;

/**
* 批次处理 百万数据
* @ClassName: test2
* @Description: TODO
* @author: 92649498
* @date: 2019年12月14日 下午11:05:21
* Class explain:
*/
public class test2 {
public static void main(String[] args) {
List<Object> list = new ArrayList<Object>();
for(int i = 0;i<500;i++){
list.add(i);
}
test2.test1(list);
}
public static void test1(List<Object> dataList){
int pointDataLimit = 100; //每次处理多少?条
List<Object> newList = new ArrayList<Object>();
for (int i=0;i<dataList.size();i++){
//分批次处理
newList.add(dataList.get(i));

if(pointDataLimit == newList.size()||i == dataList.size()-1){
printList(newList);
newList.clear();
System.out.println("*");
System.out.println("====");
}
}
}
public static void printList(List<Object> dataList){
for(Object str : dataList){
System.out.print(str + "--");
}
}
}

                      方法三

package com.nantian.winUtliTest.BaiWan;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.charset.Charset;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;

import org.apache.commons.io.FileUtils;
import org.apache.log4j.Logger;

import com.nantian.common.ConnectionPool;
import com.nantian.service.getBlackListService;

public class test3 {

public static void main(String[] args) {
HashMap<String, String> returnMap =new HashMap<String, String>();

List<String> lines = new ArrayList<String>();//黑名单增量源数据
//2019年12月13日 改版黑名单名 每次处理 10W 如果不到 10w 直接处理
//只有文件总条数小于100W 才会写入 缓存 2019年12月9日
try {
lines = FileUtils.readLines(new File("D:\WindowsETC\ETC_Managent\blackListFile\ETCPMC-U-H-191214-06-11"), Charset.forName("GBK"));//将文件 写入缓存
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
// logger.info("[黑名单下载服务 :] 删除文件");
// Boolean delDirUtil2 = winZipUtil.delDirUtil(blackListFilePath, blackListFilePath1,
// blackListFilePath2);
// 筛选是增加还是删除
System.out.println("[黑名单下载服务 :] 开始处理数据一共=" + (lines.size() - 1) + "=" + lines.get(0));
//如果增量黑名单数据超过 10W 每次处理 10W
int pointDataLimit = 100000; //每次处理多少?条
List<String> newList = new ArrayList<String>();
for (int i=0;i<lines.size();i++){
//分批次处理
newList.add(lines.get(i));
if(pointDataLimit == newList.size()||i == lines.size()-1){
for (String string : newList) {
if (string.contains("D")) {
String replaceAll = string.replaceAll("D","");
rwFile(replaceAll+"--");
System.out.print(replaceAll+"--");
}
if (string.contains("A")) {
String replaceAll = string.replaceAll("A","");
rwFile2(replaceAll+"--");
System.out.print(replaceAll+"--");
}
}
newList.clear();
rwFile("*");
rwFile("====");
System.out.println("*");
System.out.println("====");
}
}



}

}


public static void rwFile(String string){
FileWriter fw = null;
try {
fw = new FileWriter("C:\Users\92649498\Desktop\1111.txt", true);//路径一定要用"\"
fw.write(string);//这里向文件中输入结果123
fw.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fw != null) {
try {
fw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}

public static void rwFile2(String string){
FileWriter fw = null;
try {
fw = new FileWriter("C:\Users\92649498\Desktop\2222.txt", true);//路径一定要用"\"
fw.write(string);//这里向文件中输入结果123
fw.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fw != null) {
try {
fw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}

以上是关于list集合分批处理数据的主要内容,如果未能解决你的问题,请参考以下文章

List集合分页工具类

javamybatis在使用mybatis进行批量插入,批量更新等批量操作时,切割In集合List进行分批批量操作的java中的切割代码

Java 2 个 List 集合数据求并补集操作

Lambda处理List集合

清除list或者map集合,减少内存的占用率

多线程分批处理list内的值