我创建了一个以下类型的哈希多图:key作为一对字符串,字符串和值为long。
HashMultimap<Pair<String, String>, Long> hm = HashMultimap.create();
我使用put函数在表中插入了一些值。
现在我想找到所有具有多个值的键。我想使用for循环迭代所有键并找到具有多个值的键。请帮帮我,我该怎么做?
答案 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());
}