Вы можете инвертировать Multimap и просматривать в виде карты, перебирать его записей:
Multimap<String, String> inverse = Multimaps.invertFrom(multimap, HashMultimap.create());
for (Map.Entry<String, Collection<String>> entry : inverse.asMap().entrySet()) {
String value = entry.getKey();
Iterator<String> keysIterator = entry.getValue().iterator();
assert keysIterator.hasNext() : "there is always at least one key";
keysIterator.next(); // skip first key
while (keysIterator.hasNext()) { // each additional key is a duplicate
String key = keysIterator.next();
System.out.println(String.format("Key-%s,Value-%s", key, value));
}
}
Выход:
Key-20013,Value-13123
Если вы используете ImmutableMultimap
то вместо Multimaps.invertFrom(Multimap, M)
вы можете просто использовать ImmutableMultimap.inverse()
:
ImmutableMultimap<String, String> inverse = multimap.inverse();
Если вы хотите просто карта дублированных значений соответствующих ключей, то вы можете использовать Maps.filterValues(Map, Predicate)
:
Map<String, Collection<String>> keysByDuplicatedValue = Maps.filterValues(inverse.asMap(),
keys -> keys.size() > 1);
Который даст вам карту, как показано ниже:
{13123=[20014, 20013]}
Какой Multimap? гуава одна? –
Да, гуава одна. – Leo
Почему не ключ-20014, значение-13123? – Henry