2015-12-04 2 views
0

Я собираюсь сделать приложение, сравнивающее 2 .csv-списки, используя OpenCSV. Она должна работать так:Java OpenCSV - 2 Сравнение и дублирование списков

  1. Open 2 .csv файлов (каждый файл имеет столбцы: Имя, письма)
  2. Сохранить результаты (и здесь является prbolem, я не знаю, если он должен быть сохранить на стол или что-то еще)
  3. Сравнить из списка1 и List2 значение "столбец электронной почты".
  4. Если E-mail из списка 1 появится на List2 - удалить его (из списка 1)
  5. Экспорт результатов в новый файл .csv

Я не знаю, если это хороший алгоритм. Скажите, какой вариант сохранения результатов чтения CSV-файла лучше в этом случае.

С наилучшими пожеланиями

ответ

1

Вы можете обойти эту проблему легко с univocity-parsers, как он может читать данные в столбцах:

CsvParserSettings parserSettings = new CsvParserSettings(); //parser config with many options, check the tutorial 
parserSettings.setHeaderExtractionEnabled(true); // uses the first row as headers 

// To get the values of all columns, use a column processor 
ColumnProcessor rowProcessor = new ColumnProcessor(); 
parserSettings.setRowProcessor(rowProcessor); 

CsvParser parser = new CsvParser(parserSettings); 

//This will parse everything and pass the data to the column processor 
parser.parse(new FileReader(new File("/path/to/your/file.csv"))); 

//Finally, we can get the column values: 
Map<String, List<String>> columnValues = rowProcessor.getColumnValuesAsMapOfNames(); 

Допустим, вы разобрали второй CSV с этим. Просто захватить электронную почту и создать набор:

Set<String> emails = new HashSet<>(columnValues.get("Email")); 

Теперь просто итерацию по первому CSV и проверить, если электронные письма в emails наборе.

Раскрытие информации: Я являюсь автором этой библиотеки. Это бесплатно и бесплатно (лицензия Apache V2.0).

0

Если у вас есть жесткий требование использовать openCSV то вот что я считаю, является самым простым решением:

Во-первых, я хотел предложение Херонимо в о HashSet. Сначала прочитайте второй файл csv, используя CSVToBean, и сохраните адреса электронной почты в HashSet.

Затем создайте класс фильтра, который реализует интерфейс CSVToBeanFilter. В проходе конструктора в наборе и в методе allowLine вы просматриваете адрес электронной почты и возвращаете true, если он не находится в наборе (так что вы быстро просматриваете).

Затем вы передаете фильтр в CsvToBean.parse при чтении/анализе первого файла, и все, что вы получите, это записи из первого файла, адреса электронной почты которого находятся не во втором файле. В примере с javaadoc есть CSVToBeanFilter, который показывает, как это работает.

И наконец, используйте BeanToCSV для создания файла из отфильтрованного списка.

В интересах справедливости Я являюсь сторонником проекта openCSV, а также с открытым исходным кодом и бесплатным (лицензия Apache V2.0).

Смежные вопросы