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

标签 java arraylist collections compare

我正在使用 Scanner 读取 2 个文本文件(可能包含重复项)并将它们写入数组列表。我正在比较两个数组列表以找出差异。当我打印出来时,我可以看到有什么区别,但我不知道哪个记录来自哪个文件(文本文件名)

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);

实际结果:

TIMESTAMP,FE,KYMA,20190703113130,20190601000000,20190701000000,
TIMESTAMP,FE,KYMI,20190703113130,20190601000000,20190701000000,
TIMESTAMP,FE,MLI,20190703113211,20190601000000,20190701000000,
TIMESTAMP,FE,MLW,20190703113211,20190601000000,20190701000000,
TIMESTAMP,FE,TDI,20190703113119,20190601000000,20190701000000,
TIMESTAMP,FE,TDL,20190703113119,20190601000000,20190701000000,
TIMESTAMP,FE,UMRC,20190703113154,20190601000000,20190701000000,
TIMESTAMP,FE,UMRI,20190703113154,20190601000000,20190701000000,
TIMESTAMP,FE,WOLF,20190703113221,20190601000000,20190701000000,
TIMESTAMP,FE,WOLI,20190703113221,20190601000000,20190701000000,

预期结果: 我希望显示文件/列表的名称以便于理解

text2.txt,TIMESTAMP,FE,KYMA,20190703113130,20190601000000,20190701000000,
text1.txt,TIMESTAMP,FE,KYMI,20190703113130,20190601000000,20190701000000,
text1.txt,TIMESTAMP,FE,MLI,20190703113211,20190601000000,20190701000000,
text2.txt,TIMESTAMP,FE,MLW,20190703113211,20190601000000,20190701000000,
text1.txt,TIMESTAMP,FE,TDI,20190703113119,20190601000000,20190701000000,
text2.txt,TIMESTAMP,FE,TDL,20190703113119,20190601000000,20190701000000,
text2.txt,TIMESTAMP,FE,UMRC,20190703113154,20190601000000,20190701000000,
text1.txt,TIMESTAMP,FE,UMRI,20190703113154,20190601000000,20190701000000,
text2.txt,TIMESTAMP,FE,WOLF,20190703113221,20190601000000,20190701000000,
text1.txt,TIMESTAMP,FE,WOLI,20190703113221,20190601000000,20190701000000,

最佳答案

遍历 resultList 检查当前项目是否也在 prodRecordsFromStatement 中。

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

关于java - 比较 2 个文本文件并找出列表中的差异并找出哪些列表值不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57402645/

相关文章:

python - python装饰器可以使函数能够智能地操作单个对象和集合对象吗?

java - 如何修复 java android 中的 LayoutInflater 错误?

Java 7 JVM 比 JRockit 6 慢?

java - 如何使用属性名称搜索java对象列表

java - 哪种方法可以更好地获取排序数据

java - 在Java中声明具有初始容量的链表

java - 在 jframe 中运行 ffplay 视频

java - 希望 JDialog 为 "modal"但不阻止其他窗口

android - 我无法在 android 的 ListView 中显示数组列表

java - ArrayList <E> 类中的 addAll() 方法不起作用