我需要根据值对一个Map进行排序。
由于值不是唯一的,我发现自己需要将keySet转换为数组,并通过使用自定义比较器对该数组进行排序,以便根据与键关联的值进行排序。
有没有更简单的方法?
由于值不是唯一的,我发现自己需要将keySet转换为数组,并通过使用自定义比较器对该数组进行排序,以便根据与键关联的值进行排序。
有没有更简单的方法?
Map<String, String> unsortedMap = new HashMap<String, String>();
unsortedMap.put("E", "E Val");
unsortedMap.put("F", "F Val");
unsortedMap.put("H", "H Val");
unsortedMap.put("B", "B Val");
unsortedMap.put("C", "C Val");
unsortedMap.put("A", "A Val");
unsortedMap.put("G", "G Val");
unsortedMap.put("D", "D Val");
Map<String, String> sortedMap = new TreeMap<String, String>(unsortedMap);
System.out.println("\nAfter sorting..");
for (Map.Entry <String, String> mapEntry : sortedMap.entrySet()) {
System.out.println(mapEntry.getKey() + " \t" + mapEntry.getValue());
最好的方法是将HashMap转换为TreeMap。 TreeMap可以自动对键进行排序。 如果你想按值排序,那么一个快速解决方法就是,如果你的值不重复,可以将值和键交换。
Map<Object, String> map = new HashMap<Object, String>();
// Populate the Map
List<String> mapValues = new ArrayList<String>(map.values());
Collections.sort(mapValues);
Collections.sort(mapValues, comparable);
由于映射是无序的,我们可以按照以下方式进行排序
Map<String, String> map= new TreeMap<String, String>(unsortMap);
你应该注意,与哈希映射不同,树映射保证其元素按升序键排序。
“该映射根据其键的自然顺序进行排序,或者根据在创建映射时提供的比较器进行排序,具体取决于使用哪个构造函数。”
List<Map.Entry<...>> list =new LinkedList(map.entrySet())
和Collections.sort ....
进行排序。 - Hannes