Есть ли более простой способ получить заказ из 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"));
Другие вопросы по тегам