Мне очень нравится классMultimap
библиотеки Google guava. Это тип сопоставления, в котором вы можете добавить несколько значений для ключа, поэтому он эффективно сопоставляет ключ с коллекцией определенного типа. Что мне особенно нравится, так это функцияMultimaps.index()
, которая принимает Iterable
и ключевую функцию и возвращает Multimap
, которая группирует (или индексирует, или отображает) элементы Iterable
по значению, которое функция возвращает для каждого из этих элементов.
Что мне кажется немного странным, так это то, чтоMultimap.values()
возвращает плоскую коллекцию вместо коллекции коллекций? Таким образом, группировка, которую дала мне индексная функция, теряется, как только я извлекаю значения. Я могу обойти эту проблему, вызвавMultimap.asMap()
, а затем вызвав для этого values().
Кто-нибудь знает, почему может иметь смысл, что Multimap
ведет себя таким образом?