У меня есть карта, как такПолучить Top 5 значений Из Карта
Map<String, Integer> map = new HashMap<String, Integer>();
Это будет заполняться с большим количеством entrys и то, что я пытаюсь сделать, это своего рода Top 5 статистики.
То, что я прямо сейчас
int maxValueInMap=(Collections.max(map.values()));
for (Entry<String, Integer> entry : map.entrySet()) {
if (entry.getValue()==maxValueInMap) {
name = entry.getKey();
}
}
Который работает отлично подходит для получения ключа/значение числа 1 верхнего наибольшего значения в карте, но я не могу понять, как я могу получить топ 5 наивысший и иметь что-то вроде
int maxValueInMap=(Collections.max(map.values()));
for (Entry<String, Integer> entry : map.entrySet()) {
if (entry.getValue()==maxValueInMap) {
name = entry.getKey();
name2 = entry.getKey(2ndHighest);
//so on
}
}
Поблагодарили бы за любую помощь, спасибо.
EDIT
Я нашел этот код, который работает, как он хочет, чтобы это сделать
public class Main {
public static void main(String[] args) {
HashMap<String,Integer> map = new HashMap<String,Integer>();
ValueComparator bvc = new ValueComparator(map);
TreeMap<String,Integer> sorted_map = new TreeMap<String,Integer>(bvc);
map.put("a",10);
map.put("b",6);
map.put("c",6);
map.put("d",56);
map.put("e",54);
map.put("f",32);
map.put("g",1);
System.out.println("unsorted map: "+map);
sorted_map.putAll(map);
System.out.println("results: "+sorted_map);
}
}
class ValueComparator implements Comparator<String> {
Map<String, Integer> base;
public ValueComparator(Map<String, Integer> base) {
this.base = base;
}
public int compare(String a, String b) {
if (base.get(a) >= base.get(b)) {
return -1;
} else {
return 1;
}
}
}
, которая печатает
unsorted map: {a=10, b=6, c=6, d=56, e=54, f=32, g=1}
results: {d=56, e=54, f=32, a=10, c=6, b=6, g=1}
Но как бы я получить только лучшие 5 из sorted_map а не все записи?
Вы хотите получить только лучшие оценки или также связанные ключи? – Dici
Да, ключи от меня, мне нужно знать, с каким игроком связан верхний балл – user3439600
@ user3439600 - Извините, но я счел необходимым предупредить будущих читателей о том, что найденное вами решение неверно. (Сравните с тем, что я сказал, отвечая, чтобы понять, почему ...). Без предупреждения люди могут слепо копировать и вставлять их в свой собственный код и сжигаться. Можно сказать со значительным обоснованием, что он «служит им правильным» ...но даже в этом случае мы не хотели бы косвенно отвечать. –