如何对HashMaps的ArrayList进行排序,每个包含几个键值对?

我需要使用HashMaps的ArrayList调用外部API,每个包含几个预定义的键值对。 一个例子:

ArrayList<HashMap> arrayListHashMap = new ArrayList<HashMap>(); { HashMap hashMap = new HashMap(); hashMap.put("key", "A key"); hashMap.put("value", "B value"); arrayListHashMap.add(hashMap); } { HashMap hashMap = new HashMap(); hashMap.put("key", "B key"); hashMap.put("value", "A value"); arrayListHashMap.add(hashMap); } 

现在我需要对“value”键的内容对此构造进行排序。 这种排序将导致“key = B key / value = A value”条目作为arrayListHashMap中的第一个条目。

任何帮助都非常感谢。

HJW

您需要实现Comparator>或更一般地Comparator> ,它只提取与value键相关联的value ,然后使用Collections.sort 。 示例代码(对要排序的任何键进行泛化):

 class MapComparator implements Comparator> { private final String key; public MapComparator(String key) { this.key = key; } public int compare(Map first, Map second) { // TODO: Null checking, both for maps and values String firstValue = first.get(key); String secondValue = second.get(key); return firstValue.compareTo(secondValue); } } ... Collections.sort(arrayListHashMap, new MapComparator("value")); 

(这不是问题的答案 – Jon已经这样做了 – 但是评论字段对于这个来说太小了。)

您的数据结构看起来像是误解了地图的键值结构(以及示例中的哈希映射)。

Map可以包含任意数量的键,每个键也可以包含一个值。 一对键和值由Map.Entry给出(可以通过map的entrySet()方法获得)。 如果您想按键排序,只需使用SortedMap(如TreeMap)而不是通常的HashMap。

您正在通过HashMap模拟各个条目,然后将它们全部放在ArrayList中……: –

这是我在你的例子中所做的:

 Map map = new TreeMap(); map.put("B key", "B value"); map.put("A key", "B value"); System.out.println(map); // already sorted