我正在寻找一种SetJava 实现,它提供基于元素属性的查找。用 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实现:) - 使用
TreeSetwithComparatorcompareSearchKeys- 有点像hack,特别是这不再尊重元素相等性
,调用“find”方法ceiling并要求您Element为查找目的构建人工(呃......) - “等价集”(http://code.google.com/p/guava-libraries/issues/detail?id=576)-但这没有实现,似乎也不会
(如果您想回答您不知道更多替代方案 - 节省您的时间并且不要。这是我已经知道的事情,我将无法接受您的回答。)