我得到了这个 CSV 文件:
User ID,First Name
3,David
4,Ruby
10,Ruby
我想使用以下方法按升序排序:
@Override
public void sort(InputStream in, OutputStream out, String field_name, Comparator<CSVRecord> comparator) throws IOException {
Reader inputStreamReader = new InputStreamReader(in);
Iterable<CSVRecord> csvRecords = CSVFormat.RFC4180.withFirstRecordAsHeader().parse(inputStreamReader);
List<CSVRecord> csvRecordsList = Lists.newArrayList(csvRecords);
Collections.sort(csvRecordsList,comparator);
Writer outputStreamWriter = new OutputStreamWriter(out);
CSVPrinter cvsPrinter = CSVFormat.RFC4180.print(outputStreamWriter);
cvsPrinter.printRecords(csvRecordsList);
cvsPrinter.flush();
cvsPrinter.close();
问题是 Collections.sort 不执行任何操作。这是我作为参数提供的比较:
Comparator<CSVRecord> comparator = (op1,op2) -> op2.get(field).compareTo(op1.get(field));
我做错了什么?
最佳答案
CSVRecord.get()
返回一个 String
,因此您实际上调用的是 String.compareTo
而不是 Integer.compareTo
在你的比较器中。试试这个:
Comparator<CSVRecord> comparator = (op1,op2) -> Integer.valueOf(op2.get(field)).compareTo(Integer.valueOf(op1.get(field)));
关于java - 对 CSVRecords 列表进行排序 (apache commons),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41336006/