打印具有5个最高值的键

时间:2019-05-06 22:41:20

标签: java

我有一个HashMap定义为:

Map<String, Double> data = new HashMap<String, Double>();

,我正在尝试打印出Double值最高的5个字符串。我尝试通过为每个循环运行5次并保存最高值来做到这一点,同时将整个HashMap遍历5次,但是在if语句中出现空指针异常错误。

int highest = 0;
String highestkey;

 for(int i=0; i<5; i++){
     for(Map.Entry<String, Double> x : data.entrySet()){
        if(data.get(x) > highest){
           highestkey = x.getKey();
        }
     }
     System.out.println(highestkey);
     info_words.remove(highestkey);
  }

我的代码应该做的是跟踪最高的Double值,因为它解析HashMap,然后最终打印最高的键,然后将其删除,因此没有重复项,然后重复此过程4次以上,但这是

3 个答案:

答案 0 :(得分:0)

NPE是因为您没有使用现有密钥访问Map

应改为ata.get(x) > highest,而不是ata.get(x.getKey()) > highest

但是highest应该是Double而不是int

highestkey必须初始化,例如:

String highestkey = "";

答案 1 :(得分:0)

尝试一下:

        Double highest = 0.0;
        String highestkey = "";

        for (int i = 0; i < 5; i++) {
            for (Map.Entry<String, Double> x : data.entrySet()) {
                if (x.getValue() > highest) {
                    highest = x.getValue();
                    highestkey = x.getKey();
                }
            }
            System.out.println(highestkey);
            //remove highest here
        }

答案 2 :(得分:0)

一种更简单的方法是对条目进行排序并采用前5个:

data.entrySet().stream()
    .sorted(Map.Entry.comparingByValue().reversed())
    .limit(5).map(Map.Entry::getKey).forEach(System.out::println);