Ваш подход верен, но может быть еще более простым, если вы вместо этого использовали Multimap
, а
- вам не нужна изменчивость,
- вы делаете не имеет нулевых значений.
Если это так, все, что вам нужно, это ImmutableMultimap#inverse()
:
ImmutableListMultimap<Integer, String> originalMultimap = ImmutableListMultimap.of(
1, "foo",
1, "bar",
2, "baz",
42, "foo"
);
ImmutableListMultimap<String, Integer> convertedMap = originalMultimap.inverse();
System.out.println(convertedMap); // {foo=[1, 42], bar=[1], baz=[2]}
Я использовал ImmutableListMultimap
вместо ImmutableMultimap
потому что документы рекомендуют делать это :
Предупреждение: избегайте прямого использования ImmutableMultimap
в качестве типа (как и в случае Multimap
). Предпочитайте подтипы, такие как ImmutableSetMultimap
или ImmutableListMultimap
, которые имеют четко определенную семантику equals(java.lang.Object)
, таким образом избегая общего источника ошибок и путаницы.