【发布时间】:2014-09-04 20:23:45
【问题描述】:
我想读取 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 中的“列表”中的元素对该地图进行排序吗?此外,如果您认为这种数据结构选择不好,请随时建议一种更简单的数据结构来执行此操作。
谢谢。
【问题讨论】:
-
地图是个坏主意,我对您提供的链接中的答案投了反对票。列表列表是这里的方法。
-
注意:当您比较字符串时,
"100" < "2"为'1' < '2'如果您想要不同的行为,您需要更改比较器。 -
@AlexWien 你能解释一下原因吗?是因为我们不能轻松地对 Map 进行排序吗?
-
列表答案列表将起作用,但您需要确保为每一列而不是每一行创建一个列表,以便排序工作。您的示例显示了包含每行数据的列表。读取 CSV 文件时有点棘手,但还不错。
-
一个 csv 文件是一个没有键的行序列。 ArrayList 是完美的选择,它可以通过给出 position = linenumber 直接访问行。地图需要更多时间来查找行,以搜索关键行号。地图用于其他目的。