当我试图获得键与排序值匹配时,我正在获得null
。
public class Linked_L {
static Map<String, Integer> map = new HashMap<>();
public static void sortbyValue(){
ArrayList<Integer> sortedValues = new ArrayList<>(map.values());
Collections.sort(sortedValues);
for (Integer y: sortedValues)
System.out.println("Key = " +map.get(y) + ", Value = " + y);
}
public static void main(String args[])
{
// putting values in the Map
map.put("Jayant", 80);
map.put("Abhishek", 90);
map.put("Anushka", 80);
map.put("Amit", 75);
map.put("Danish", 40);
// Calling the function to sortbyKey
sortbyValue();
}
结果:
Key = null, Value = 40
Key = null, Value = 75
Key = null, Value = 80
Key = null, Value = 80
Key = null, Value = 90
此处:
map.get(y)
y
是地图的一个值,但还记得get
的作用吗?它接受映射的键,并给出与该键相关联的值,而不是!
你应该对映射条目(即键值对)按它们的值排序,而不是取出所有值,忽略所有键。这样,您就可以在循环中轻松获得每对密钥。
ArrayList<Map.Entry<String, Integer>> sortedEntries = new ArrayList<>(map.entrySet());
Collections.sort(sortedEntries, Comparator.comparing(Map.Entry::getValue));
for (var entry: sortedEntries) {
System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
}
您的map存储字符串作为其键。你从它得到整数值,它当然返回null~