我将使用 OpenCSV 制作一个应用程序,比较 2 个 .csv 列表。它应该像这样工作:
- 打开 2 个 .csv 文件(每个文件包含以下列:姓名、电子邮件)
- 保存结果(这是一个问题,我不知道是否应该将其保存到表格或其他内容中)
- 比较“电子邮件列”的列表 1 和列表 2 的值。
- 如果列表 1 中的电子邮件出现在列表 2 中 - 将其删除(从列表 1 中)
- 将结果导出到新的 .csv 文件
不知道这个算法好不好。请告诉我在这种情况下保存读取 .csv 文件结果的最佳选项。
亲切的问候
最佳答案
您可以使用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 许可证)。
关于Java OpenCSV - 2 列表比较和复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34088132/