[英]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-catch
、 close()
和正確的名稱被省略) :
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.