我正在使用 Scanner 讀取 2 個(gè)文本文件(可能包含重復(fù)項(xiàng))并將它們寫入 arraylist。我正在比較兩個(gè) arraylist 以找出差異。當(dāng)我打印出來時(shí),我可以看到有什么區(qū)別,但我不知道哪個(gè)記錄來自哪個(gè)文件(文本文件名)text1.txt 中的內(nèi)容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 中的內(nèi)容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 回答

婷婷同學(xué)_
TA貢獻(xiàn)1844條經(jīng)驗(yàn) 獲得超8個(gè)贊
遍歷resultList
檢查以查看當(dāng)前項(xiàng)目是否也在prodRecordsFromStatement
.
如果是,則來自文件 1,否則來自文件 2。

HUH函數(shù)
TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超4個(gè)贊
您的解決方案需要具備怎樣的性能?如果性能不是非常關(guān)鍵,并且您的列表不長(zhǎng),那么您可以改用 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 中的所有行。
添加回答
舉報(bào)
0/150
提交
取消