【问题标题】:How to compare two lists with different name reference but with same actual data如何比较具有不同名称引用但具有相同实际数据的两个列表
【发布时间】:2019-04-14 08:56:05
【问题描述】:

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

【问题讨论】:

  • 更改您的 readAuditLogFromCSV 方法以将数据加载到 AuditRow 对象中并删除重复的类 AuditCsvRow 也删除行 Collection listOne = new ArrayList(Arrays.asList(CSVrows)); Collection listTwo = new ArrayList(Arrays.asList(uiRowList)); 因为它们没有任何用处,@987654329 @ 和 CSVRows 已经是列表。
  • 这些列表不包含相同的内容。第一个列表包含双引号,而第二个列表没有。显然,您的第一个 CSV 读取方法应该包含引号字符。
  • 谢谢@ErwinBolwidt 我确实使用了你的建议,但现在我面临一个问题,我的列表中的项目由于某种原因被双引号,这就是我将 CSV 文件解析为列表的方式(编辑我最后的问题)。
  • @RealSkeptic - 你将如何处理双引号?我在我的问题中添加了我用来将 CSV 行解析为列表的方法。
  • 我会使用 CSV 解析器,有可用的常用库。 CSV 不只是用逗号分隔。有引用和转义需要处理。

标签: java string list selenium object


【解决方案1】:

@Erwin Bolwidt 的回答非常好,它可以帮助您减少重复代码。不过,我想分享我的技巧来比较这样的对象。

基本上,我会将它们解析为 Json 并比较字符串

Gson gson = new Gson();
boolean isTheSameData = gson.toJson(CSVrows).equals(gson.toJson(uiRowList));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-12
    • 2020-02-02
    • 2021-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多