Коллекции и естественно заказ карты> - PullRequest
0 голосов
/ 30 июня 2011

У меня проблемы с более сложной картой;для стандартного Map<Long, String> я бы сделал что-то вроде:

Ordering<Long> valueComparator = Ordering.natural().onResultOf(Functions.forMap(myMap));
Map<Long, String> orderedMap = ImmutableSortedMap.copyOf(myMap, valueComparator);

Но, похоже, я не могу получить его как Map<Long, Map<String, String>>, все еще заказанный LongМожет я что-то упустил?Ниже не работает ...

Ordering<Long> valueComparator = Ordering.natural().onResultOf(Functions.forMap(myOtherMap));
Map<Long, Map<String, String>> orderedMyOtherMap = ImmutableSortedMap.copyOf(myOtherMap,valueComparator);

1 Ответ

1 голос
/ 30 июня 2011

Ваш первый пример не делает то, что вы, кажется, говорите, он делает.Он создает карту, упорядоченную по значениям String, соответствующим каждой клавише Long.Если вы хотите просто заказать по ключам, вы просто сделаете:

ImmutableSortedMap<Long, String> orderedMap = ImmutableSortedMap.copyOf(myMap);

То же самое будет работать для Map<Long, Map<String, String>>.Причина, по которой вы пытаетесь не работать, состоит в том, что Map<String, String> не является Comparable, поэтому для него нет естественного упорядочения.

Кроме того, вы можете хочу рассмотреть возможность использования Table<Long, String, String> вместо Map<Long, Map<String, String>>.Есть даже TreeBasedTable , который будет хранить ключи строк и столбцов в отсортированном порядке.

...