如何使用Java中的特定字段对CSV文件中的数据进行排序?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何使用Java中的特定字段对CSV文件中的数据进行排序?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1765字,纯文字阅读大概需要3分钟。
内容图文
![如何使用Java中的特定字段对CSV文件中的数据进行排序?](/upload/InfoBanner/zyjiaocheng/818/9b1a80a211a147be86e298e985f2ead6.jpg)
我想用Java读取CSV文件并使用特定列对其进行排序.我的CSV文件如下所示:
ABC,DEF,11,GHI....
JKL,MNO,10,PQR....
STU,VWX,12,XYZ....
考虑到我想使用第三列对其进行排序,我的输出应如下所示:
JKL,MNO,10,PQR....
ABC,DEF,11,GHI....
STU,VWX,12,XYZ....
在对用于保存CSV数据的数据结构进行一些研究之后,这里的人建议使用Integer和List的Map数据结构作为键和值对in this question:
Map<Integer, List<String>>
where the value, List<String> = {[ABC,DEF,11,GHI....], [JKL,MNO,10,PQR....],[STU,VWX,12,XYZ....]...}
And the key will be an auto-incremented integer starting from 0.
那么有人可以建议一种方法来使用Java中“List”中的元素对此Map进行排序吗?此外,如果您认为这种数据结构选择不好,请随意建议更简单的数据结构来执行此操作.
谢谢.
解决方法:
我会使用String的ArrayList的ArrayList:
ArrayList<ArrayList<String>>
每个条目都是一行,这是一个字符串列表.
您通过以下方式初始化列表:
List<ArrayList<String>> csvLines = new ArrayList<ArrayList<String>>();
要获得第n行:
List<String> line = csvLines.get(n);
要对您编写自定义比较器进行排序.在该比较器的构造函数中,您可以传递用于排序的字段位置.
然后,compare方法获取存储位置的String值,并根据位置将其转换为基本ava类型.例如,你知道在csv的第2位有一个Integer,然后将String转换为int.这对于相应的排序是必要的.您还可以将Class的ArrayList传递给构造函数,以便它知道哪个字段是哪种类型.
然后使用String.compareTo()或Integer.compare(),具体取决于列位置等.
编辑工作代码示例:
List<ArrayList<String>> csvLines = new ArrayList<ArrayList<String>>();
Comparator<ArrayList<String>> comp = new Comparator<ArrayList<String>>() {
public int compare(ArrayList<String> csvLine1, ArrayList<String> csvLine2) {
// TODO here convert to Integer depending on field.
// example is for numeric field 2
return Integer.valueOf(csvLine1.get(2)).compareTo(Integer.valueOf(csvLine2.get(2)));
}
};
Collections.sort(csvLines, comp);
内容总结
以上是互联网集市为您收集整理的如何使用Java中的特定字段对CSV文件中的数据进行排序?全部内容,希望文章能够帮你解决如何使用Java中的特定字段对CSV文件中的数据进行排序?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。