簡體   English   中英

通過兩次 for 循環迭代處理大量字符串以進行驗證

[英]Deal with large amount of strings to validation with two for-loop iteration

我正面臨這個問題,有點不知道如何處理它。 我需要處理一個可以包含 100 或 10 萬行的 csv 文件。

在繼續處理之前我需要做一些驗證,其中之一是檢查每個document是否具有相同typeOfDoc 讓我解釋:

文件內容:

document;typeOfDoc
25693872076;2
25693872076;2
...
25693872076;1

此驗證包括檢查文檔是否沿document具有不同類型的typeOfDoc ,如果是,則表明該文件無效。

最初我想在兩個for循環中迭代第一次出現的document (我認為這是正確的,因為我不知道我會收到什么),對於那個正確的document ,我遍歷文件的 rest 到驗證它是否再次出現,如果有相同的document但如果typeOfDoc與第一次出現不同,我將此驗證存儲在 object 上,以表明該文件有一個具有兩種不同類型的document 但是......你會想象它的去向。 100k 行不會發生這種情況,即使是 100 行也是如此。

哪種方法更好?

可以提供幫助的東西。

這就是我打開和處理文件的方式( try-catchclose()和正確的名稱被省略)

List<String> lines = new BufferedReader(new FileReader(path)).lines().skip(1).collect(Collectors.toList());

for (String line : lines) {
    String[] arr = line.split(";");
    String document = arr[0];
    String typeOfDoc = arr[1];
    for (String line2 : lines) {
        String[] arr2 = line2.split(";");
        String document2 = arr2[0];
        String typeOfDoc2 = arr2[1];
        if (document.equals(document2) && !typeOfDoc.equals(typeOfDoc2)) {
            ...create object to show that error on grid...
        }
    }
}

您可以嘗試在 Hashmap 中查找重復的鍵和值,這樣會更容易。

public class App {

    public static void main(String[] args) throws IOException {
        String delimiter = ";";
        Map<String, String> map = new HashMap<>();

        Stream<String> lines = Files.lines(Paths.get("somefile.txt")); 
        lines.forEach(line -> checkAndPutInMap(line,map,delimiter));
        lines.close();

    }

    private static void checkAndPutInMap(String line, Map<String,String> map, String delimiter) {
        String document = line.split(delimiter)[0];
        String typeOfDoc = line.split(delimiter)[1];
        if (map.containsKey(document) && !map.get(document).equals(typeOfDoc)) {
            ...create object to show that error on grid...
        }
        else
            map.put(document, typeOfDoc));
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM