我正在使用在LinkedHashMap中返回键值对的函数。
LinkedHashMap<Integer,String> lhm = new LinkedHashMap<Integer,String>();
// Put elements to the map
lhm.put(10001, "Stack");
lhm.put(10002, "Heap");
lhm.put(10003, "Args");
lhm.put(10004, "Manus");
lhm.put(10005, "Zorat");
注意:我无法将LinkedHashMap更改为我的代码中的任何其他地图 函数正在其他几个函数中使用。
我也用Google搜索并尝试使用TreeMap,它以升序提供所需的结果。但是,这里的TreeMap键是按升序排列的,而不是值。
我的要求主要是价值观。
如何以升序排序获取值。
Desired Output
10003, "Args"
10002, "Heap"
10004, "Manus"
10001, "Stack"
10005, "Zorat"
提前谢谢!!!!
答案 0 :(得分:2)
你需要一个比较器
Comparator<Entry<String, String>> valueComparator = new
Comparator<Entry<String,String>>() {
@Override public int compare(Entry<String, String> e1, Entry<String,
String> e2) {
String v1 = e1.getValue(); String v2 = e2.getValue(); return
v1.compareTo(v2);
}
};
答案 1 :(得分:1)
您可以使用流来执行此操作:
lhm.entrySet().stream().sorted(Map.Entry.comparingByValue())
.forEach( (e)->System.out.println(e.getKey() + ", " + e.getValue()) );
上面会打印出您想要的内容。
答案 2 :(得分:0)
此答案与this answer的开头相同,但将已排序的条目放回LinkedHashMap中:
LinkedHashMap<Integer,String> lhm2 =
lhm.entrySet().stream().sorted(Map.Entry.comparingByValue())
.collect(Collectors.toMap(Entry::getKey, Entry::getValue,(a,b)->a, LinkedHashMap::new));
lhm2.forEach((k,v) -> System.out.println(k + ", " + v));
答案 3 :(得分:0)
lhm.entrySet().stream()
.sorted(Map.Entry.comparingByValue().reversed())
.collect(Collectors.toMap(Entry::getKey, Entry::getValue));
这将按升序对您的地图进行排序。