我正在寻找一种Set
Java 实现,它提供基于元素属性的查找。用 Guava 术语思考它可以使用 a Function<Element, SearchKey>
(预计在所有集合元素中是唯一的)并提供一个find(SearchKey key)
返回 an的方法Element
,该函数将为其返回key
。
需要满足的明显假设:
- 的结果在集合
function(element)
中的整个生命周期内是恒定的element
。 - 函数为所有集合元素提供独特的结果
原因:
有时需要Set<Element>
并且字段类型不能更改为 a Map<SearchKey, Element>
(例如在 JPA 实体中或在第 4 方代码的情况下)。尽管如此,当构建这样一个对象时,人们可以安全地使用他们自己的Set
具有类似Map
功能的实现。
备择方案:
我已经找到了一些替代方案,但似乎都不完美
- 没有
Map
类似功能 - 使用线性搜索find(SearchKey)
实现(适用于每个Set
实现:) - 使用
TreeSet
withComparator
compareSearchKeys
- 有点像hack,特别是这不再尊重元素相等性
,调用“find”方法ceiling
并要求您Element
为查找目的构建人工(呃......) - “等价集”(http://code.google.com/p/guava-libraries/issues/detail?id=576)-但这没有实现,似乎也不会
(如果您想回答您不知道更多替代方案 - 节省您的时间并且不要。这是我已经知道的事情,我将无法接受您的回答。)