Google Guava имеет SortedSetMultimap
. Замечательно. Теперь, где неизменная версия? Существует ImmutableSetMultimap
. Но как насчет ImmutableSortedSetMultimap
? (Пожалуйста, не отвечайте «Почему вы хотите?»)Guava ImmutableSortedSetMultimap?
ответ
Если вам не нужен дополнительный смысл Multimap
, у вас есть косвенный подход (я написал код в формате SO, поэтому он может не работать , но идея есть):
SortedSetMultimap<K,V> set = ...;
ImmutableMap<K, ImmutableSortedSet<V>> result = ImmutableMap.copyOf(Maps.transform(set.asMap(), new Function<SortedSet<V>, ImmutableSortedSet<V>>() {
public ImmutableSortedSet<V> apply(SortedSet<V> s) {
return ImmutableSortedSet.copyOf(s);
}
});
То есть: превратить ваш SortedSetMultimap
в Map<K,SortedSet<V>>
, то Map<K,ImmutableSortedSet<V>>
, а затем ImmutableMap
.
И я не знаю достаточно Гуавы, но так как ImmutableSetMultimap
неизменен, порядок копируемого набора может остаться: это означает, что нет никакой необходимости в ImmutableSortedSetMultimap
для навигации/итерации (если вам нужен конкретный метод от SortedSet
).
Это не будет фактически осуществлять SortedSetMultimap
, но ImmutableSetMultimap.Builder
имеет orderValuesBy(Comparator)
метод, который вы можете использовать, который имеет эффект, что наборы значений являются ImmutableSortedSet
s.
Я искал это сам и только что обнаружил это: Multimaps.unmodifiableSortedSetMultimap()
Не точно то, что мы ищем, но достаточно хорошо в моем случае.
Сэр, уточните еще несколько тем. Если я правильно помню, характер набора несколько противоречит порядку? – Coffee
Вы имеете в виду, 'TreeSet' не существует? – biziclop
Чтобы ответить на вопрос, действительно, похоже, не один, хотя это вполне разумная вещь. Возможно, вам следует отправить запрос на функцию. – biziclop