为了账号安全,请及时绑定邮箱和手机立即绑定

比较 2 个文本文件并找出列表中的差异并找出哪些列表值不匹配

比较 2 个文本文件并找出列表中的差异并找出哪些列表值不匹配

白衣染霜花 2023-05-24 16:11:58
我正在使用 Scanner 读取 2 个文本文件(可能包含重复项)并将它们写入 arraylist。我正在比较两个 arraylist 以找出差异。当我打印出来时,我可以看到有什么区别,但我不知道哪个记录来自哪个文件(文本文件名)text1.txt 中的内容TIMESTAMP,FE,TDI,20190703113119,20190601000000,20190701000000,TIMESTAMP,FE,KYMI,20190703113130,20190601000000,20190701000000,TIMESTAMP,FE,UMRI,20190703113154,20190601000000,20190701000000,TIMESTAMP,FE,MLI,20190703113211,20190601000000,20190701000000,TIMESTAMP,FE,WOLI,20190703113221,20190601000000,20190701000000,TIMESTAMP,FE,VEM,20190703113221,20190601000000,20190701000000,TIMESTAMP,FE,ZER,20190703113154,20190601000000,20190701000000,text2.txt 中的内容TIMESTAMP,FE,TDL,20190703113119,20190601000000,20190701000000,TIMESTAMP,FE,KYMA,20190703113130,20190601000000,20190701000000,TIMESTAMP,FE,UMRC,20190703113154,20190601000000,20190701000000,TIMESTAMP,FE,MLW,20190703113211,20190601000000,20190701000000,TIMESTAMP,FE,WOLF,20190703113221,20190601000000,20190701000000,TIMESTAMP,FE,VEM,20190703113221,20190601000000,20190701000000,TIMESTAMP,FE,ZER,20190703113154,20190601000000,20190701000000,代码:Scanner prodScanner = new Scanner(prodFile);     while (prodScanner.hasNextLine()) {     String currentRecord = prodScanner.nextLine().trim();                     if (currentRecord.length() > 0) {                    prodRecordsFromStatement.add(currentRecord);                  }           }Scanner nonProdScanner = new Scanner(nonProdFile);while (nonProdScanner.hasNextLine()) {            String currentRecord = nonProdScanner.nextLine().trim();              if (currentRecord.length() > 0) {                                        nonProdRecordsFromStatement.add(currentRecord);                                }                            }Collection<String> result = new ArrayList<>(CollectionUtils.disjunction(prodRecordsFromStatement, nonProdRecordsFromStatement)); List<String> resultList = new ArrayList<>(result); Collections.sort(resultList);
查看完整描述

2 回答

?
婷婷同学_

TA贡献1844条经验 获得超8个赞

遍历resultList检查以查看当前项目是否也在prodRecordsFromStatement.

如果是,则来自文件 1,否则来自文件 2。


查看完整回答
反对 回复 2023-05-24
?
HUH函数

TA贡献1836条经验 获得超4个赞

您的解决方案需要具备怎样的性能?如果性能不是非常关键,并且您的列表不长,那么您可以改用 usingsubtract而不是 disjunction。

例如

Collection<String> resultProdRecords = new ArrayList<>(CollectionUtils.subtract(prodRecordsFromStatement, nonProdRecordsFromStatement));
Collection<String> resultNonProdRecords = new ArrayList<>(CollectionUtils.subtract(prodRecordsFromStatement, nonProdRecordsFromStatement));

resultProdRecords将包含 prodRecordsFromStatement 中不在 nonProdRecordFromStatement 中的所有行。

resultNonProdRecords将包含 nonProdRecordFromStatement 中不在 prodRecordsFromStatement 中的所有行。


查看完整回答
反对 回复 2023-05-24
  • 2 回答
  • 0 关注
  • 114 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信