java - 如何比较具有不同名称引用但具有相同实际数据的两个列表
问题描述
我有 2 个列表,它们的内容相同,但名称参考不同。
我有一个表格,我使用“导出”按钮下载了一个 CSV 文件到我的本地文件系统,我正在使用 selenium 获取表格我试图将这些列表转换为“集合”,但这并没有成功。
这是我的 CSV 列表的样子:
AuditCsvRow{dateStr='"2019-04-14 11:48"', userStr='"admin"', entityStr='"Users"', actionStr='"Login"', nameStr='"admin"', descriptionStr='"User login successful: admin"', clientIpStr='"192.168.51.35"'}
这是使用 selenium 下载的列表:
AuditRow{dateStr='2019-04-14 11:48', userStr='admin', entityStr='Users', actionStr='Login', nameStr='admin', descriptionStr='User login successful: admin', clientIpStr='192.168.51.35', clientIpTxt='192.168.51.35'}
List<AuditRow> uiRowList = new ArrayList<>();
List<AuditCsvRow>CSVrows = readAuditLogFromCSV(CSV_FILE_PATH);
uiRowList = auditPage.getAudittable();
Collection listOne = new ArrayList(Arrays.asList(CSVrows));
Collection listTwo = new ArrayList(Arrays.asList(uiRowList));
listOne.equals(listTwo);
private List<AuditRow> readAuditLogFromCSV(String fileName) throws IOException {
List<AuditRow> rowsList = new ArrayList<>();
Path pathToFile = Paths.get(fileName);
try(BufferedReader br = Files.newBufferedReader(pathToFile, StandardCharsets.US_ASCII)){
String line = br.readLine();
while(line != null){
String[] attributes = line.split(",");
AuditRow auditCsvRow = auditPage.createCsvRow(attributes);
rowsList.add(auditCsvRow);
line = br.readLine();
}
}
return rowsList;
}
解决方案
@Erwin Bolwidt 的回答非常好,它可以帮助您减少重复代码。但是,我想分享我的技巧来比较这样的对象。
基本上,我会将它们解析为 Json 并比较字符串
Gson gson = new Gson();
boolean isTheSameData = gson.toJson(CSVrows).equals(gson.toJson(uiRowList));