如何按照许多类别对Arraylist进行排序

时间:2014-03-22 05:40:03

标签: java arraylist override compareto

我在这里比较但只是书的标题。但之后我想将它与作者和书号进行比较。据我所知,必须只有一种覆盖方法。所以请帮助我。

@Override

public int compareTo(Book bk) {

return this.bookTitle.compareTo(bk.bookTitle);
}

4 个答案:

答案 0 :(得分:3)

您必须为不同的排序类型实现不同的比较器,并将它们传递给Collections.Sort方法。见Comparator

Class AuthorSort implements Comparator<Book>
{

   public int compare(Book b1, Book b2){
       // do comparision on Author
    }

}

实施书号排序

Class BookNoSort implements Comparator<Book>
{

   public int compare(Book b1, Book b2){
       // do comparision on Book Number
    }

}

在Collections类上调用Sort方法并提供不同的实现

Collections.sort(list, new BookNumberSort());
Collections.sort(list, new AuthorSort());

答案 1 :(得分:0)

Google Comparator

class BookAuthorComparator implements Comparator<Book>{
    public int compare(Book b1, Book b2){
        return b1.getAuthor().compareTo(b2.getAuthor());
    }
}

Collections.sort(bookList, new BookAuthorCompartor());

答案 2 :(得分:0)

通过实施Compareable

编写自己的比较器

参考这个 How to compare objects by multiple fields

答案 3 :(得分:0)

你可以使用匿名内部类:

Collections.sort(bookList, new Comparator<Book>() {
        @Override
        public int compare(Book b1, Book b2) {
            return b1.property.compare(b2.property);
        }
    });

如果您想要对标题或作者进行排序,只需更改

return b1.getTitle().compare(b2.getTitle()); 

return b1.getAuthor().compare(b2.getAuthor());