3

我创建了以下类型的哈希多重映射:键为一对字符串,字符串和值一样长。

HashMultimap<Pair<String, String>, Long> hm = HashMultimap.create();

我使用 put 函数在表中插入了一些值。

现在我想找到所有具有多个值的键。我想使用 for 循环遍历所有键并找到具有多个值的键。请帮帮我我该怎么做?

4

3 回答 3

4

马特涵盖了程序方式。更实用的方法(仍然很冗长,因为 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();

我面前没有库和编译器,因此可能存在一些未解决的泛型问题。

于 2011-09-27T16:41:03.733 回答
2
Set<Pair<String, String>> keysWithMultipleValues = Sets.newHashSet();

for (Pair<String, String> key : hm.keySet())
{
    if (hm.get(key).size() > 1)
    {
        keysWithMultipleValues.add(key);
    }
}
于 2011-09-27T16:30:59.010 回答
2

这应该比 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());
}
于 2011-09-27T17:59:21.320 回答