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...)ComparatorSearchKeysceilingElement - 「等価セット」(http://code.google.com/p/guava-libraries/issues/detail?id=576)-しかし、それは実装されておらず、そうなるつもりはないようです
(これ以上の選択肢を知らないと答えたい場合は、時間を節約してください。これは私がすでに知っていることです。あなたの答えを受け入れることはできません。)