我已經創建了以下類型的hash多重映射:key作爲一對字符串,字符串和值。按計數過濾Guava HashMultimap鍵
HashMultimap<Pair<String, String>, Long> hm = HashMultimap.create();
我已經使用put函數在表格中插入了一些值。
現在我想找到所有那些有多個值的鍵。我想使用for循環遍歷所有鍵並找到具有多個值的鍵。請幫我,我該怎麼做?
我已經創建了以下類型的hash多重映射:key作爲一對字符串,字符串和值。按計數過濾Guava HashMultimap鍵
HashMultimap<Pair<String, String>, Long> hm = HashMultimap.create();
我已經使用put函數在表格中插入了一些值。
現在我想找到所有那些有多個值的鍵。我想使用for循環遍歷所有鍵並找到具有多個值的鍵。請幫我,我該怎麼做?
Set<Pair<String, String>> keysWithMultipleValues = Sets.newHashSet();
for (Pair<String, String> key : hm.keySet())
{
if (hm.get(key).size() > 1)
{
keysWithMultipleValues.add(key);
}
}
Matt已經涵蓋了程序方式。更多的功能的方法(還麻煩,因爲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>> r = Sets.newHashSet();
for(Entry<Pair<String, String>> e : create.keys().entrySet()) {
if(e.getCount() > 1) r.add(e.getElement());
}
+1,不過我想你想'&& values.size()> 1'。該規範還說,你不需要檢查null;如果沒有映射,則返回空集合。 –
@馬克你是對的 - 已經糾正。還指出'Multimap#get()'永遠不會返回'null' –