繁体   English   中英

如何在Java中获取前10个键值HashMap

[英]How to fetch first 10 key value HashMap in Java

我有这样的哈希图:

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

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

谁能帮我 ?

如果您使用 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 参数,如果需要,您可以在其中提供自定义排序逻辑。

由于您的地图已经排序,我们可以获得前 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));

您需要使用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]));
}

将地图的entrySet()取出到一个列表中,通过getValue()对其进行排序,并取值最大的 10 个条目。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM