我创建了以下类型的哈希多重映射:键为一对字符串,字符串和值一样长。
HashMultimap<Pair<String, String>, Long> hm = HashMultimap.create();
我使用 put 函数在表中插入了一些值。
现在我想找到所有具有多个值的键。我想使用 for 循环遍历所有键并找到具有多个值的键。请帮帮我我该怎么做?
马特涵盖了程序方式。更实用的方法(仍然很冗长,因为 Java 还没有闭包)是这样的:
public class MoreThanOnePredicate<T extends Map.Entry<?, ? extends Collection<?>>> implements Predicate<T> {
public boolean apply(T entry) {
return entry.getValue().size() > 1;
}
}
//...
return Maps.filterEntries(hm.asMap(), new MoreThanOnePredicate<Pair<String, String>, Collection<Long>>()).keySet();
我面前没有库和编译器,因此可能存在一些未解决的泛型问题。
Set<Pair<String, String>> keysWithMultipleValues = Sets.newHashSet();
for (Pair<String, String> key : hm.keySet())
{
if (hm.get(key).size() > 1)
{
keysWithMultipleValues.add(key);
}
}
这应该比 Matt 的版本更有效,因为没有使用键查找:
Set<Pair<String, String>> r = Sets.newHashSet();
for(Entry<Pair<String, String>> e : create.keys().entrySet()) {
if(e.getCount() > 1) r.add(e.getElement());
}