【问题标题】:How to fetch first 10 key value HashMap in Java如何在Java中获取前10个键值HashMap
【发布时间】:2017-08-10 06:02:52
【问题描述】:

我有这样的哈希图:

{apple, 20}, {nanas,18}, {anggur, 12},...........

我的 hashmap 已经按值降序排序。我想从第一个元素哈希图中获取 10 个元素。

谁能帮帮我?

【问题讨论】:

  • 只在Entryset上使用一个简单的循环?
  • "我的 hashmap 已经按值降序排序" hashmap 不保留任何顺序。如果您能够对其进行排序,那么您可能会使用其他结构(如列表)来进行排序。在这种情况下,为什么不简单地遍历此类列表中的前 10 个元素呢?如果不是这种情况,请澄清。
  • HashMap 无法排序,因为它没有顺序。因此没有“第一”10。没有“最后”10。这个问题没有意义。
  • 很确定 HashMap 是无序的。它们没有“前 10 个元素”。

标签: java dictionary get hashmap


【解决方案1】:

由于您的地图已经排序,我们可以像这样获取前 10 个键值作为新地图:

Map<String, Integer> res = map.entrySet().stream()
        .limit(10)
        .collect(Collectors.toMap(Entry::getKey, Entry::getValue));

如果您的地图没有排序,我们可以选择:

Map<String, Integer> res = map.entrySet().stream()
        .sorted((o1, o2) -> o2.getValue() - o1.getValue())
        .limit(10)
        .collect(Collectors.toMap(Entry::getKey, Entry::getValue));

【讨论】:

    【解决方案2】:

    如果你使用 java 8,我会选择:

    List<MyKeyType> keys = map.entrySet().stream()
      .map(Map.Entry::getKey)
      .sorted()
      .limit(10)
      .collect(Collectors.toList());
    

    它是如何工作的:

    1. entrySet().steam() - 获取地图的入口集,并制作其值的流。
    2. map() - 从 Map.Entry 中获取键值并将其进一步传递到流中
    3. sorted() - 如果类实现了 Comparator 接口,则默认使用它,或者您可以根据需要提供自己的实现。
    4. limit(10) - 将对象数限制为 10。
    5. 将排序后的 10 个值收集到一个列表中。

    sorted() 方法采用可选的 Comparator 参数,如果需要,您可以在其中提供自定义排序逻辑。

    【讨论】:

    • 我也会。:-)
    • 由于地图似乎已经排序,这可以简化为不那么冗长 - List keys = sortedMap.keySet().stream() .limit(10) .collect(Collectors .toList());
    【解决方案3】:

    将地图的entrySet()取出列表,按getValue()排序,取10个值最大的条目。

    【讨论】:

      【解决方案4】:

      您需要使用LinkedHashMap 为了保留元素的顺序(即插入顺序),您可以参考下面的代码来检索第一个加载的地图对象中的 10 个元素:

      Map<String, Integer> map = new LinkedHashMap<>();
      //Load your values here
      Set<String> keys = map.keySet();
      String[] keysArray = keys.toArray(new String[keys.size()]);
      for(int i=0; i<keysArray.length && i<10;i++) {
          System.out.println(map.get(keysArray[i]));
      }
      

      【讨论】:

      • LinkedHashMap 维护插入顺序或可选的访问顺序——不是按值降序排列。
      猜你喜欢
      • 2012-04-12
      • 2010-11-25
      • 1970-01-01
      • 2021-12-03
      • 2013-06-10
      • 2016-03-08
      • 2014-09-21
      • 2011-04-27
      相关资源
      最近更新 更多