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

キーによるルックアップが使用されないため、これは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 に答える
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 に答える