我有两个HashMaps:
Map<String,Integer> map1 = {"One"= 1245598 , "two" = 0 ,"three" =1};
Map<String,Boolean> map2 = {"One" =true , "two" =false ,"three" = true};
其中&#34;一个&#34; &#34; 2&#34;是属性。
我已轻松排序了第一张地图map<String,Integer>
。但是如何根据第一张地图对第二张地图进行排序,这样sort方法会返回一张如下所示的地图:
map2= {"One" =true , "three" = true ,"two" = false};
即。按降序排列。
答案 0 :(得分:1)
Map
本来就是未分类的。第一张地图的排序事实只是偶然的。 E.g。
Map<String, Integer> map1 = new HashMap<>();
map1.put("Four", 4);
map1.put("One", 1245598);
map1.put("two", 0);
map1.put("three", 1);
map1.put("Six", 6);
将导致
map1={Six=6, Four=4, One=1245598, two=0, three=1}
要获取有序地图,您需要使用特殊的地图类型,例如TreeMap
。您可以为TreeMap
指定比较器,该比较器允许您根据第一张地图的值对第二个Map
进行排序。
Map<String, Integer> map1 = new TreeMap<>();
map1.put("One", 1245598);
map1.put("two", 0);
map1.put("three", 1);
Map<String,Boolean> map2 = new TreeMap<>(Comparator.comparing(map1::get).reversed());
map2.put("One",true);
map2.put("two", false);
map2.put("three", true);
System.out.println("map1="+map1);
System.out.println("map2="+map2);
输出:
map1={One=1245598, three=1, two=0}
map2={One=true, three=true, two=false}
但请注意,第一张地图的更新可能会破坏第二张地图。
Comparator.comparing(map1::get).reversed()
只是在java 8中创建比较器的简短方法:
Comparator.comparing(func)
创建Comparator
,通过比较将func
应用于这些对象的结果来比较2个对象,即从compare(o1, o2)
的{{1}}方法返回的值为< / p>
Comparator
func.apply(o1).compareTo(func.apply(o2))
是map1::get
get
方法的方法参考。给定值map1
,它将返回o1
。结合这两个事实,因此创建的比较器的返回类型是
map1.get(o1)
map1.get(o1).compareTo(map1.get(o2))
只返回comparator.reversed()
的逆序,而不是升序排序。
答案 1 :(得分:0)