如何从LinkedHashMap按升序获取值

时间:2017-05-04 08:19:33

标签: java sorting collections treemap linkedhashmap

我正在使用在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"

提前谢谢!!!!

4 个答案:

答案 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));

这将按升序对您的地图进行排序。