У меня есть карта, которую я упрощая, но в Ессенции содержит ключевые значения некоторых данных, таких как:Список номеров с карты
Yahya, 4
John, 4
Blake, 2
Jill 2
Janoe, 6
Jilly 12
Zapon, 5
Zoe, 4
Hamed, 1
мне нужно заказать, так что я получаю следующий вывод:
1. Jilly, 12 pts
2. Janoe, 6 pts
3. Zapon, 5 pts
4. John, 4 pts
4. Yahya, 4 pts
4. Zoe, 4 pts
7. Blake, 2 pts
7. Jill, 2 pts
9. Hamed, 1 pts
Я уже использовал компаратор на заказ значения Карта в соответствии со значением:
public <K, V extends Comparable<V>> Map<K, V> sortByValues(final Map<K, V> map) {
Comparator<K> valueComparator = new Comparator<K>() {
public int compare(K k1, K k2) {
int compare = map.get(k2).compareTo(map.get(k1));
if (compare == 0) return 1;
else return compare;
}
};
Map<K, V> sortedByValues = new TreeMap<K, V>(valueComparator);
sortedByValues.putAll(map);
return sortedByValues;
}
и читать: How to get element position from Java Map, Order HashMap alphabetically by value и многое другое, но не уверены, как это сделать.
Я знаю, что вы можете использовать это, чтобы получить ключевые значения:
for (Map.Entry<String, Integer> entry : map.entrySet()){
System.out.println(entry.getKey() + " ," + entry.getValue() + " pts");
}
Однако две функциональные пропавшие:
- Сортировка по алфавиту, когда ключи одинаковы
- держать ту же нумерацию, когда значение то же самое и перейти к правильному счету позже.
Пробовал это:
Map<String, Integer> map = sortByValues(groupList);
int count = 1;
int counter = 1;
int previousScore = 0;
for (Map.Entry<String, Integer> entry : map.entrySet()) {
//counter = count;
if (previousScore == entry.getValue()) {
System.out.println(counter - 1 + " " + entry.getKey() + "," + entry.getValue() + " pts");
} else {
System.out.println(counter + " " + entry.getKey() + "," + entry.getValue() + " pts");
previousScore = entry.getValue();
count++;
}
counter++;
}
Любые мысли приветствуются и приветствуются. Может ли кто-нибудь предложить метод для достижения требуемого результата?
Спасибо за ответ, но ... k1.compareTo (к2) удаляет повторяющиеся значения вместо нумерации и пробовал разные счета до и, следовательно, задавал вопрос, поскольку я не мог понять это правильно. Имел ту же идею, но не знал, как ее реализовать. –
Объявите 'K' как' Comparable', так же, как и с 'V'. Или, еще лучше, избавьтесь от родового и просто используйте «Map», так как это то, что вам действительно нужно. Покажите свой код для подсчетов, если вы хотите, чтобы мы помогли вам понять, что с ним не так. –
Dima