Ожидание в блоке catch теперь возможно в отношении предварительного просмотра Roslyn конечного пользователя, как показано здесь (в списке в списке «Ожидание в catch / finally») и будет включено в C # 6.
В приведенном примере указан
try … catch { await … } finally { await … }
Обновление: добавлена новая ссылка и что она будет в C # 6
У вас не может быть TreeMap
сама сортирует значения, поскольку это противоречит спецификации SortedMap
:
A
Map
, которая дополнительно обеспечивает полное упорядочение на своих ключах ].
Однако, используя внешнюю коллекцию, вы всегда можете отсортировать Map.entrySet ()
, как хотите, по ключам, значениям или даже по их комбинации (!!).
Вот общий метод, который возвращает SortedSet
of Map.Entry
, учитывая Map
, значения которого равны Comparable
:
static <K,V extends Comparable<? super V>>
SortedSet<Map.Entry<K,V>> entriesSortedByValues(Map<K,V> map) {
SortedSet<Map.Entry<K,V>> sortedEntries = new TreeSet<Map.Entry<K,V>>(
new Comparator<Map.Entry<K,V>>() {
@Override public int compare(Map.Entry<K,V> e1, Map.Entry<K,V> e2) {
int res = e1.getValue().compareTo(e2.getValue());
return res != 0 ? res : 1;
}
}
);
sortedEntries.addAll(map.entrySet());
return sortedEntries;
}
Теперь вы можете сделать следующее:
Map<String,Integer> map = new TreeMap<String,Integer>();
map.put("A", 3);
map.put("B", 2);
map.put("C", 1);
System.out.println(map);
// prints "{A=3, B=2, C=1}"
System.out.println(entriesSortedByValues(map));
// prints "[C=1, B=2, A=3]"
Обратите внимание, что неприятные вещи произойдут, если вы попытаетесь изменить либо сам SortedSet
, либо Map.Entry
внутри, потому что это не больше "вид" исходной карты, такой как entrySet ()
.
Вообще говоря, необходимость сортировать записи карты по их значениям нетипична.
==
для Integer
Ваш исходный компаратор сравнивает Integer
с помощью ==
. Это почти всегда неверно, поскольку ==
с операндами Integer
является ссылочным равенством, а не равенством значений.
System.out.println(new Integer(0) == new Integer(0)); // prints "false"!!!
TreeMap
всегда отсортирован по ключам, все остальное невозможно. Компаратор
просто позволяет вам управлять способом сортировки ключей.
Если вам нужны отсортированные значения, вы должны извлечь их в Список
и отсортировать его.
Это невозможно сделать с помощью компаратора
, так как он всегда будет получать ключ карты для сравнения. TreeMap
может сортировать только по ключу.