私は次のハッシュマップを持っています:
HashMap<String, Integer> hm = new HashMap<String, Integer>;
hm.put("a", 1);
hm.put("b", 12);
hm.put("c", 53);
hm.put("d", 2);
hm.put("e", 17);
hm.put("f", 8);
hm.put("g", 8);
3つの最も高い値を持つキーを取得するにはどうすればよいですか?だからそれは戻ります:
"c", "e", "b"
ありがとう。
これが私の見解です。これは、TreeSetの上位n項目のみを追跡します。
import Java.util.*;
import Java.util.stream.Collectors;
public class TopN {
public static <E> Collection<E> topN(Iterable<E> values, Comparator<? super E> comparator, int n) {
NavigableSet<E> result = new TreeSet<>(comparator.reversed());
for (E value : values) {
result.add(value);
if (result.size() > n) {
result.remove(result.last());
}
}
return result;
}
public static void main(String[] args) {
Map<String, Integer> hm = Map.of(
"a", 1,
"b", 12,
"c", 53,
"d", 2,
"e", 17,
"f", 8,
"g", 8);
List<String> result = topN(hm.entrySet(), Map.Entry.comparingByValue(), 3)
.stream()
.map(Map.Entry::getKey)
.collect(Collectors.toList());
System.out.println(result);
}
}
最終的な出力は[c, e, b]