gpt4 book ai didi

java - 逐行解析 2 个文件并需要避免重复(在特殊情况下)

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:29:42 25 4
gpt4 key购买 nike

我有 2 个文件,我正在逐行解析这些文件,并将信息添加到 2 个单独的 ArrayList<String> 容器中。我正在尝试创建一个最终容器“finalPNList ”,它反射(reflect)了下面的“结果文件/数组列表”。

问题是我没有成功避免重复。我已经以各种方式更改了代码但没有成功。有时我对条件限制太多,避免所有重复项,有时我把它放得太松,包括所有重复项。我似乎找不到使它恰到好处的条件。

这是目前为止的代码——在这种情况下,看到 processLine() 的内容并不真正相关,只知道您得到的 map 有 2 个 ArrayLists<String>

public static Map<String, List<String>> masterList = new HashMap<String, List<String>>();
public static List<String> finalPNList = new ArrayList<String>();
public static List<String> modifier = new ArrayList<String>();
public static List<String> skipped = new ArrayList<String>();

for (Entry<String, String> e : tab1.entrySet()) {
String key = e.getKey();
String val = e.getValue();

// returns BufferedReader to start line processing
inputStream = getFileHandle(val);
// builds masterList containing all data
masterList.put(key, processLine(inputStream));
}
for (Entry<String, List<String>> e : masterList.entrySet()) {
String key = e.getKey();
List<String> val = e.getValue();
System.out.println(modifier.size());
for (String s : val) {
if (modifier.size() == 0)
finalPNList.add(s);
if (!modifier.isEmpty() && finalPNList.contains(s)
&& !modifier.contains(key)) {
// s has been added by parent process so SKIP!
skipped.add(s);
} else
finalPNList.add(s);
}
modifier.add(key);
}

这是数据的样子(非常简化处理大约 20K 行,每个文件中大约 10K 行):

文件A

123;data
123;data
456,data

文件B

123;data
789,data
789,data

结果文件/ArrayList

123;data
123;data
789,data
789,data

最佳答案

  • !modifier.contains(key) 始终为真,它可以从您的 if 语句中删除。
  • modifier.size() == 0 可以替换为 modifier.isEmpty()
  • 由于您似乎想从文件 B 添加重复项,因此在检查是否存在时需要检查文件 A,而不是 finalPNList(我只是检查了 masterList 中的适用列表>,请随意将其更改为更合适/更有效的内容。
  • 您需要在第一个 if 语句之后有一个 else,否则您将两次添加文件 A 中的项目。
  • 我假设您只是在输出中遗漏了 456,否则我可能不太明白。

用更符合 SSCCE 精神的东西替换你的文件 IO 的修改代码:

masterList.put("A", Arrays.asList("123","123","456"));
masterList.put("B", Arrays.asList("123","789","789"));
for (Map.Entry<String, List<String>> e : masterList.entrySet()) {
String key = e.getKey();
List<String> val = e.getValue();
System.out.println(modifier.size());
for (String s : val) {
if (modifier.isEmpty())
finalPNList.add(s);
else if (!modifier.isEmpty() && masterList.get("A").contains(s)) {
// s has been added by parent process so SKIP!
skipped.add(s);
} else
finalPNList.add(s);
}
modifier.add(key);
}

Test .

关于java - 逐行解析 2 个文件并需要避免重复(在特殊情况下),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19041278/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com