java - 通过两次 for 循环迭代处理大量字符串以进行验证
问题描述
我正面临这个问题,有点不知道如何处理它。我需要处理一个可以包含 100 或 10 万行的 csv 文件。
在继续处理之前我需要做一些验证,其中之一是检查每个验证document
是否相同typeOfDoc
。让我解释:
文件内容:
document;typeOfDoc
25693872076;2
25693872076;2
...
25693872076;1
此验证包括检查文件是否document
具有不同类型typeOfDoc
,如果是,则表明该文件无效。
最初我想在两个for循环中迭代第一次出现document
(我认为这是正确的,因为我不知道我会收到什么),并且为了那个正确document
我迭代文件的其余部分以验证是否有另一个出现,如果有相同document
但如果 typeOfDoc
第一次出现不同,我将此验证存储在一个对象上,以显示该文件有一个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));
}
}
推荐阅读
- ffmpeg - FFMpeg 令牌授权失败
- javascript - 使用 javascript 控制台更改谷歌浏览器中的所有链接
- c# - DateTime 字段在 EFCore 3.1.1 的基于表达式树的查询生成器中引发错误
- symfony - 如何使用奏鸣曲管理员从 symfony 4 中的数据库中删除集合类型空条目
- php - 如何在laravel中将动态值定义为常量
- angular - 如何使用日期计算持续时间 - 角度 2+
- python - kivy弹出窗口中的重叠内容
- excel - 为什么我的数据打印到我的工作表名称数组的最后一个索引?
- node.js - Mongoose 在数组中查找子文档并更新它
- c# - Mono csharp AOT 优化