Java排序:按属性排序对象数组,不允许对象使用Comparable

时间:2012-09-16 19:01:14

标签: java arrays sorting properties comparable

我有一个类,包含一个Book对象数组,我需要根据Book的属性(Title或PageNumber)对数组进行排序。问题是我不允许将Comparable类与Book一起使用。您如何推荐我在图书馆中排列图书?写我自己的那种?或者有更简单的方法吗?如果您需要代码片段,请询问!

4 个答案:

答案 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));
相关问题