#java #string #list #selenium #object
#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;
}
Комментарии:
1. Измените свой
readAuditLogFromCSV
метод для загрузки данных вAuditRow
объекты и избавьтесь от повторяющегося классаAuditCsvRow
, также избавьтесь от строкCollection listOne = new ArrayList(Arrays.asList(CSVrows)); Collection listTwo = new ArrayList(Arrays.asList(uiRowList));
, поскольку они не делают ничего полезногоuiRowList
иCSVRows
уже являются списками.2. Списки не содержат одинакового содержимого. Первый список содержит двойные кавычки, которых нет во втором списке. По-видимому, ваш метод чтения CSV для первого должен был содержать символ кавычки.
3. Спасибо @ErwinBolwidt Я воспользовался вашим предложением, но теперь я столкнулся с проблемой, когда мой элемент в списке по какой-то причине заключен в двойные кавычки, вот как я разбираю CSV-файл в список (ОТРЕДАКТИРОВАЛ СВОЙ ВОПРОС В КОНЦЕ).
4. @RealSkeptic — Как бы вы справились с двойными кавычками? Я добавил к своему вопросу метод, который я использую для разбора строк CSV в список.
5. Я бы использовал анализатор CSV, доступны общие библиотеки. CSV — это не просто разделение по запятым. Необходимо обработать кавычки и экранирование.
Ответ №1:
Ответ @Erwin Bolwidt очень хорош, он помогает вам сократить дублирование кода. Тем не менее, я хотел бы поделиться своим трюком для сравнения подобных объектов.
В принципе, я бы проанализировал их в Json и сравнил строки
Gson gson = new Gson();
boolean isTheSameData = gson.toJson(CSVrows).equals(gson.toJson(uiRowList));