如何比较具有不同名称引用但具有相同实际数据的两个列表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何比较具有不同名称引用但具有相同实际数据的两个列表相关的知识,希望对你有一定的参考价值。

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

以上是关于如何比较具有不同名称引用但具有相同实际数据的两个列表的主要内容,如果未能解决你的问题,请参考以下文章

BigTable:来自不同列族的两个列限定符可以具有相同的名称吗?

SQL查询从具有相同列“名称”的其他两个表中获取具有不同值的单列“名称”[关闭]

VBA比较两个列表并删除不同列中具有重复值的行

比较具有相同数据但标记不同的两个 HTML 页面的最佳方法是啥

密钥列具有不同名称时实体拆分?

如何基于相同的 ID 比较两个不同数据框中的日期列