java - 对 CSVRecords 列表进行排序 (apache commons)

标签 java sorting collections

我得到了这个 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/

相关文章:

java - JPA 在没有直接关系的实体之间分配数据

c - 尝试 Cormen 的堆排序,但出现段错误

java - 使用 Comparator 和 Arrays.asList() 进行排序

java - Java 中的内存映射集合

java - Java 中的 log4j 记录器中的方法名称无法正确打印

java - ServerRpcHandler 中的 Vaadin NPE

java - 哪种 Java 设计模式最适合 if-else 语句(包括循环)?

algorithm - 适合插入排序的数据结构是什么?

C++ 运算符 < 重载

java - 从java中的 map 中检索有序列表