按计数过滤Guava HashMultimap键

时间:2011-09-27 16:23:39

标签: java guava multimap

我创建了一个以下类型的哈希多图:key作为一对字符串,字符串和值为long。

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

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

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

3 个答案:

答案 0 :(得分: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();

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

答案 1 :(得分:2)

Set<Pair<String, String>> keysWithMultipleValues = Sets.newHashSet();

for (Pair<String, String> key : hm.keySet())
{
    if (hm.get(key).size() > 1)
    {
        keysWithMultipleValues.add(key);
    }
}

答案 2 :(得分: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());
}