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

时间:2017-03-18 18:54:37

标签: java get hashmap

我有这样的hashmap:

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

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

任何人都可以帮助我吗?

4 个答案:

答案 0 :(得分: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个值收集到列表中。
  6. sorted()方法采用可选的Comparator参数,如果需要,您可以在其中提供自定义排序逻辑。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

将地图的entrySet()取出到列表中,按getValue()对其进行排序,并获取最有价值的10个条目。

答案 3 :(得分:0)

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