我使用 ORDERED BY 进行数据库查询,并将相应的结果集处理为自定义对象列表。
对象类没有实现Comparable。但是,它使用 ORDERED BY 中使用的相同字段覆盖 equals()和hashcode()。
由于列表已经排序,如何使用排序字段作为键并且没有可比较的或比较器来对列表进行二进制搜索?
答案 0 :(得分:3)
总之 - 你做不到。至少不是JDK的二进制搜索。 Comparable
和Comparator
是java表达顺序的方式。但这应该不是问题。即使您无法更改数据类,也可以始终使用自己的(匿名)Comparator
:
int index = Arrays.binarySearch(myArray,
myObject,
Comparator.comparing(MyClass::getSomeField));
答案 1 :(得分:0)
为了使用groovy.lang.MissingPropertyException: No such property: TRACE for class: org.apache.log4j.Level
之类的现有JDK方法,您必须实现Collections.binarySearch
(因为您的类没有实现Comparator<YourCustomClass>
)。
如果你不想实现Comparable
,你必须自己实现整个二进制搜索逻辑,这比仅仅实现Comparator<YourCustomClass>
更有用。