我正在尝试对嵌套的hashmaps进行排序,其中两个hashmaps都需要进行排序。
第一个hashmap应该按键排序。第二个应按值排序。到目前为止
我的hashmap看起来像
HashMap<String,HashMap<String,Integer>> carOwners = new
HashMap<String,HashMap<String, Integer>>();
一个例子是说我们有第一个字符串是名称,汽车品牌,Qnty。
示例:大卫:
奥迪> 5
BMW> 4
izabel:
vw> 10
mb> 4
基本上,我们首先对名称进行排序,然后按值对嵌套的哈希进行排序。如何完成...找不到任何有用的信息:(>
用于排序Map
您可以使用以下类:TreeMap
。正如官方文件所说,
根据其键的自然顺序对地图进行排序,或者根据地图创建时间提供的比较器,具体取决于使用哪个构造函数。
如果要在插入顺序中对元素进行排序,请使用linkedhashmap。
此链接列表定义了迭代排序,通常是将密钥插入地图(插入订单(的顺序。
要按值对Map
进行排序,请参阅此帖子。也适用于Java7和Java8。
希望它有帮助。
将第一个映射作为三映射,对于第二张地图,请按值对其进行排序。请参阅此帖子
以下是您问题的代码段。
public static void main(String[] args) {
Map<String, HashMap<String, Integer>> carOwners = new TreeMap<String, HashMap<String, Integer>>();
HashMap<String, Integer> nameQuantity = new HashMap<String, Integer>();
nameQuantity.put("Audi", 5);
nameQuantity.put("BMW", 4);
carOwners.put("David", sortByValue(nameQuantity));
nameQuantity = new HashMap<String, Integer>();
nameQuantity.put("VW", 10);
nameQuantity.put("MB", 4);
carOwners.put("Izabel", sortByValue(nameQuantity));
for (Map.Entry<String, HashMap<String, Integer>> carOwnerEntry : carOwners.entrySet()) {
System.out.println(carOwnerEntry.getKey());
HashMap<String, Integer> nameQty = carOwnerEntry.getValue();
for (Map.Entry<String, Integer> nameQtyEntry : nameQty.entrySet()) {
System.out.println(nameQtyEntry.getKey() + " " + nameQtyEntry.getValue());
}
}
public static <K, V extends Comparable<? super V>> HashMap<K, V> sortByValue(Map<K, V> map) {
List<Map.Entry<K, V>> list = new LinkedList<Map.Entry<K, V>>(map.entrySet());
Collections.sort(list, new Comparator<Map.Entry<K, V>>() {
public int compare(Map.Entry<K, V> o1, Map.Entry<K, V> o2) {
return (o1.getValue()).compareTo(o2.getValue());
});
HashMap<K, V> result = new LinkedHashMap<K, V>();
for (Map.Entry<K, V> entry : list) {
result.put(entry.getKey(), entry.getValue());
}
return result;
}