问题描述
我正在处理 2 个 csv 文件并检查常见条目并将它们保存到一个新的 csv 文件中。但是比较需要很多时间。我的方法是首先将文件中的所有数据读入 ArrayList 然后使用 parallelStream over主列表,我对另一个列表进行比较,并使用字符串构建器附加常见条目,然后将其保存到新的 csv 文件中。 下面是我的代码。
allReconFileLines.parallelStream().forEach(baseLine -> {
String[] baseLinesplitted = baseLine.split(",|,");
if (baseLinesplitted != null && baseLinesplitted.length >= 13 && baseLinesplitted[13].trim().equalsIgnoreCase("#N/A")) {
for (int i = 0; i < allCompleteFileLines.size(); i++) {
String complteFileLine = allCompleteFileLines.get(i);
String[] reconLinesplitted = complteFileLine.split(",");
if (reconLinesplitted != null && reconLinesplitted[3].replaceAll("^\"|\"$","").trim().equals(baseLinesplitted[3].replaceAll("^\"|\"$","").trim())) {
//pw.write(complteFileLine);
matchedLines.append(complteFileLine);
break;
}
}
}
});
pw.write(matchedLines.toString());
目前需要几个小时来处理。我怎样才能让它快点?
解决方法
将一个文件的键读入例如一个 HashSet
,然后当你阅读第二个文件时,检查每一行是否在集合中,如果是,则将其写出。这样你只需要足够的内存来保存一个文件的密钥。