首页 > 解决方案 > 想要比较两个记录列表,将公共保存到一个新列表,记录在 1M 左右,需要大量时间来处理

问题描述

我正在处理 2 个 csv 文件并检查常见条目并将它们保存到一个新的 csv 文件中。但是比较需要很多时间。我的方法是首先将文件中的所有数据读入 ArrayList,然后在主列表上使用 parallelStream,我在另一个列表上进行比较,并使用字符串生成器附加常见条目,然后将其保存到新的 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());

目前处理需要数小时。我怎样才能让它快点?

标签: javamultithreadingcollectionsjava-streamparallelstream

解决方案


将一个文件的键读入例如 a HashSet,然后在读取第二个文件时,为每一行检查它是否在集合中,如果是则将其写出。这样你只需要足够的内存来保存一个文件的密钥。


推荐阅读