我有一个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次以上,但这是
答案 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);