5

Set要素のプロパティに基づいてルックアップを提供する Javaの実装を探しています。Guava の用語で考えると、Function<Element, SearchKey>(すべてのセット要素で一意であると予想される) を使用して構築でき、関数が を返す を返すfind(SearchKey key)メソッドを提供できます。Elementkey

満たす必要がある明らかな仮定:

  • の結果は、セット内の のfunction(element)存続期間全体にわたって一定です。element
  • 関数は、すべてのセット要素に対して一意の結果を返します

理由:
必要がSet<Element>あり、フィールド タイプを に変更できない場合がありますMap<SearchKey, Element>(JPA エンティティや 4rd パーティ コードの場合など)。それでも、そのようなオブジェクトを構築するときは、独自のSet実装をのMapような機能で安全に使用できます。

代替案:

私がすでに見つけたいくつかの代替手段がありますが、どれも完璧ではないようです

  • のような機能を持たないMap- 実装に線形検索を使用find(SearchKey)する (すべてのSet実装で動作します:)
  • 比較TreeSetで使用-ハックに少し似ています。特に、これは要素の等価性を尊重しなくなり、「検索」メソッドが呼び出され、ルックアップのために人工的に構築する必要があります (uogh...)ComparatorSearchKeys
    ceilingElement
  • 「等価セット」(http://code.google.com/p/guava-libraries/issues/detail?id=576)-しかし、それは実装されておらず、そうなるつもりはないようです

(これ以上の選択肢を知らないと答えたい場合は、時間を節約してください。これは私がすでに知っていることです。あなたの答えを受け入れることはできません。)

4

3 に答える 3

2

ForwardingSet私は何かが欠けているに違いありませんHashBiMap.keySet()。私の些細な実装は とのみを気addaddAllし、他のすべてのものは何の努力もせずに機能するはずです。単一のテストはありません。これには Guava testlib を使用することをお勧めします。

于 2013-09-06T17:31:05.053 に答える