想要比较两个记录列表,将commons保存到一个新列表,记录在1M左右,需要很多时间来处理

问题描述

我正在处理 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,然后当你阅读第二个文件时,检查每一行是否在集合中,如果是,则将其写出。这样你只需要足够的内存来保存一个文件的密钥。