当前位置: 首页 > 知识库问答 >
问题:

如何从LinkedHashMap中按升序获取值

穆睿才
2023-03-14

我使用的函数返回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更改为代码中的任何其他映射,因为该函数正在其他几个函数中使用。

我也在谷歌上搜索并尝试使用TreeMap,它以升序给出我们想要的结果。但是,在树映射中,键是按升序排列的,而不是值。

我的要求主要是价值观。

如何按升序获取值。

Desired Output

10003, "Args"
10002, "Heap"
10004, "Manus"
10001, "Stack"
10005, "Zorat"

提前谢谢!!!!

共有3个答案

干永丰
2023-03-14
lhm.entrySet().stream()
.sorted(Map.Entry.comparingByValue().reversed())
.collect(Collectors.toMap(Entry::getKey, Entry::getValue));

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

尹善
2023-03-14

您可以通过流来实现这一点:

lhm.entrySet().stream().sorted(Map.Entry.comparingByValue())
    .forEach( (e)->System.out.println(e.getKey() + ", " + e.getValue()) );

上面会打印出你想要的内容。

伏默
2023-03-14

你需要一个比较器

  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); 
 } 
};
 类似资料:
  • 我知道,要获取地图,我可以使用fetchMap,但它不支持LinkedHashMap,我想保持由orderBy创建的插入顺序。 我试过了 但是字段1和字段2部分给了我以下错误。 无法解析“T”中的方法“field1” 希望有人能帮我~ 谢谢 解决方案: 基于@Lukas的回答,我尝试了几次,发现必须做到以下几点: > 在方法中,所有字段都必须有一个类型,除了那些计算的,其中添加类型会抛出在字段列表

  • 我有一个问题:我的HashMap看起来像: 我想对这个hashmap进行排序,结果成功了!返回。我想要的是得到最好的‘价值’的钥匙。最好的'values'是最小的数字,在本例中为-1。是否可以在中返回键?例如,如果最佳值是3,它出现了5次,它应该把5个键还给我。仅等于一个最佳值。我怎么能那么做?

  • 我有一个方法,它应该从JSON返回不同的对象,这取决于参数中的类类型。我试着根据参数返回一个对象列表,但是我只把LinkedHashMap放入ArrayList。 我搜索了很多,但是在解决方案中,类类型的所有地方都是硬编码的。 有没有一种不用硬代码就能解决这个问题的方法? 我只想传递类类型并通过一个方法获取对象。 当我的对象有关系时,我得到这个例外 无法识别的字段"字段"(类model.orm.部

  • 问题内容: 可以按升序对它进行排序: 如何按降序排列? 问题答案: 要以相反顺序排序,请将作为参数传递给。 要获取a ,您必须明确要求使用4参数。如果您未指定所需的地图类型,则将获得默认值,而默认值是。由于不保留元素的顺序,因此绝对不会为您服务。 使用静态导入,它将变得更加令人愉快:

  • 要按升序对其进行int排序,我可以使用: 我怎样才能按照递减的顺序来做呢?