Jeśli coś się da zrobić łatwo na streamach to chyba najlepiej to zrobić łatwo na streamach:
public static void main(final String[] args) {
Optional<Map.Entry<String, Integer>> result = Stream.of( // budujemy strumień z wpisami
entry("czerwony", 6),
entry("zielony", 9),
entry("niebieski", 10),
entry("czarny", 1),
entry("czerwony", 2),
entry("zielony", 12)
).collect(Collectors.groupingBy(Map.Entry::getKey, Collectors.summingInt(Map.Entry::getValue))) // tutaj masz mapę z sumami, tzn. czerwony -> 8, zielony -> 21
.entrySet()
.stream()
.sorted((l, r) -> Integer.compare(r.getValue(), l.getValue())) // sortujesz odwrotnie, tj. większe wartości później
.findFirst(); // znajdujesz pierwszy taki element
System.out.println(result.orElseThrow().toString());
}
private static Map.Entry<String, Integer> entry(final String color, final int value) {
return Map.entry(color, value);
}