Set
要素のプロパティに基づいてルックアップを提供する Javaの実装を探しています。Guava の用語で考えると、Function<Element, SearchKey>
(すべてのセット要素で一意であると予想される) を使用して構築でき、関数が を返す を返すfind(SearchKey key)
メソッドを提供できます。Element
key
満たす必要がある明らかな仮定:
- の結果は、セット内の の
function(element)
存続期間全体にわたって一定です。element
- 関数は、すべてのセット要素に対して一意の結果を返します
理由:
必要がSet<Element>
あり、フィールド タイプを に変更できない場合がありますMap<SearchKey, Element>
(JPA エンティティや 4rd パーティ コードの場合など)。それでも、そのようなオブジェクトを構築するときは、独自のSet
実装をのMap
ような機能で安全に使用できます。
代替案:
私がすでに見つけたいくつかの代替手段がありますが、どれも完璧ではないようです
- のような機能を持たない
Map
- 実装に線形検索を使用find(SearchKey)
する (すべてのSet
実装で動作します:) - 比較
TreeSet
で使用-ハックに少し似ています。特に、これは要素の等価性を尊重しなくなり、「検索」メソッドが呼び出され、ルックアップのために人工的に構築する必要があります (uogh...)Comparator
SearchKeys
ceiling
Element
- 「等価セット」(http://code.google.com/p/guava-libraries/issues/detail?id=576)-しかし、それは実装されておらず、そうなるつもりはないようです
(これ以上の選択肢を知らないと答えたい場合は、時間を節約してください。これは私がすでに知っていることです。あなたの答えを受け入れることはできません。)