我有hashmap,其键如“folder / 1.txt,folder / 2.txt,folder / 3.txt”,值包含这些文本文件数据。
现在我被困了。我想对此列表进行排序。但它不允许我这样做:( 这是我的hashmap数据类型:
HashMap<String, ArrayList<String>>
以下函数工作正常,但是对于arraylist不适用于hashmap。
Collections.sort(values, Collections.reverseOrder());
我也尝试了MapTree,但它也没有用,或者可能是我无法使用它。我用了 以下步骤使用maptree
对代码进行排序HashMap testMap = new HashMap();
Map sortedMap = new TreeMap(testMap);
其他任何方式吗??
我有一个疑问,因为我的密钥是(文件夹/ 1.txt,文件夹/ 2.txt)可能是这个原因?
答案 0 :(得分:10)
我猜您希望按键列表排序。
如果你的hashmap被称为h
,那么试试这个:
SortedSet<String> sortedKeys = new TreeSet<String>(h.keySet());
答案 1 :(得分:5)
为什么不这样做?
Map<String, ValueObject> testMap = new TreeMap<String, ValueObject>();
其中ValueObject
是您用于值的任何类。
编辑:这是基于一些假设 - 等待获取更多信息以了解OP真正需要的内容。
答案 2 :(得分:2)
使用TreeMap,并为文件夹路径实现Comparator接口。
比较器应根据您想要的规则比较两个键,并将该比较器传递给TreeMap的构造函数。如果按纯字母规则排序是可以的,那么您可以跳过此步骤。如果你想对路径做一些特殊的事情,那么你需要定义比较器中的内容。
答案 3 :(得分:0)
我的第一个猜测是使用File
个对象而不是String
个对象作为键。但后来我注意到你说你的密钥是"folder/1.txt,folder/2.txt,folder/3.txt"
,你的值是Collection<Strings>
类型。如果是这样,也许你的解决方案应该是
map.put("folder/1.txt", ...);
map.put("folder/2.txt", ...);
map.put("folder/3.txt", ...);
而不是
map.put("folder/1.txt,folder/2.txt,folder/3.txt", new ArrayList(...));
在您尝试时使用TreeMap
对单个文件进行排序。
答案 4 :(得分:0)
我相信当您遍历密钥时,HashMaps不保证任何排序。迭代顺序取决于存储桶和冲突。
您可能希望将值放入其他集合中,然后对它们进行排序。
答案 5 :(得分:0)
有时我使用LinkedHashMap,当调用keySet()时,它会以排序的方式返回项目,当你通过put()添加到地图时。