Есть ли более простой способ получить заказ из HashMap, чем то, что я сделал?
HashMap, который я использовал, состоит из имен и оценок, и я печатаю их от наименьшего к наибольшему. То, как я это сделал, кажется мне грязным, и я, вероятно, сделал это далеко. Есть ли метод, который может сократить мой код? (Я новичок в Java)
String currentName = "None";
int currentScore = 0;
HashMap<String, Integer> Scores = new HashMap<String, Integer>();
Scores.put("Bob", 50);
Scores.put("Billy", 40);
Scores.put("Carl", 65);
for (int i = 0; i < Scores.size(); i++) {
for (String name : Scores.keySet()) {
if(Scores.get(name) < 99999 && Scores.get(name) > currentScore) {
System.out.println(name + " scored " + Scores.get(name) + " points");
currentName = name;
currentScore = Scores.get(name);
}
}
}
2 ответа
В Java 8 вы можете транслировать записи карты, а затем сортировать их по значению:
scores.entrySet()
.stream()
.sorted(Map.Entry.comparingByValue())
.forEach(e -> System.out.println(e.getKey() +
" scored " +
e.getValue() +
" points"));
Используя java-8 и потоки, вы можете легко отсортировать и распечатать их.
Scores.entrySet()
.stream()
.sorted(Comparator.comparing(Map.Entry::getValue))
.forEach(e -> System.out.println(e.getKey() + " scored " + e.getValue() + " points"));