我有一个类,包含一个Book对象数组,我需要根据Book的属性(Title或PageNumber)对数组进行排序。问题是我不允许将Comparable类与Book一起使用。您如何推荐我在图书馆中排列图书?写我自己的那种?或者有更简单的方法吗?如果您需要代码片段,请询问!
答案 0 :(得分:19)
您可以提供Comparator
来比较您希望的任何类型,Comparable
或其他类型。
对于数组和集合,请使用
Arrays.sort(array, myComparator);
Collections.sort(list, myComparator);
即使是像TreeSet这样的已排序集合也可以使用自定义Comparator
e.g。
Collections.sort(books, new Comparator<Book>() {
public int compare(Book b1, Book b2) {
return if b1 is greater return +1, if b2 is smaller return -1 otherwise 0
}
});
答案 1 :(得分:5)
如果您可以使用Comparators
,请为您需要的每种类型的排序编写一个,例如,升序用于书名,降序用于页码。如果第一个参数大于第二个参数,则compare
的{{1}}方法必须返回正数;如果第一个参数较小则必须返回负数,如果第一个参数相等则必须返回零。
Comparator
答案 2 :(得分:1)
坚持你的图书馆:
java.util.Collections.sort(bookList, bookComparator);
答案 3 :(得分:0)
扩展@ PeterLawrey对Java 8的回答,您现在可以使用Lambda Expression代替Comparable<T>
代理:
Collections.sort(books, (firstBook, secondBook -> b1 is greater return +1,
if b2 is smaller return -1 otherwise 0));