Java复杂排序

bwa*_*ner 5 java sorting

我陷入困境,因为我有一个有三个变量的对象书

String title
int Year
String authorName
Run Code Online (Sandbox Code Playgroud)

我必须按升序或降序中的一个,两个或所有三个变量对书进行排序,我实现了标题排序,但当人们选择多个变量进行排序时,我不知道该做什么.

这是我的一些代码:

书类:

import java.util.ArrayList;


public class Book{

String title;
String authorName;
int editionYear;

public Book(String title, String authorName, int editionYear){
    this.title = title;
    this.authorName = authorName;
    this.editionYear = editionYear;

}

public String getBookInfo(){

    ArrayList bookInfo = new ArrayList();
    bookInfo.add(this.title);
    bookInfo.add(this.authorName);
    bookInfo.add(this.editionYear);
    return bookInfo.toString();
}

}
Run Code Online (Sandbox Code Playgroud)

BookSorter类:

import java.util.Arrays;
import java.util.Comparator;

public class BookSorter{

private String sortkey;
private String order;
Book[] Books;

public BookSorter(Book Book1, Book Book2, Book Book3, Book Book4){
    this.Books = new Book[] {Book1, Book2, Book3, Book4};
}

public Book[] sortByTitle(boolean sortorder){
    Comparator<Book> byTitle = new TitleComparator(sortorder);
    Arrays.sort(Books, byTitle);
    for(int i=0;i<4;i++) System.out.println(Books[i].title);
    return Books;
}
}
Run Code Online (Sandbox Code Playgroud)

TitleComparator:

import java.util.Comparator;

class TitleComparator implements Comparator<Book> {

boolean ascending;

public TitleComparator(boolean ascending){
    this.ascending = ascending;
}

public int compare(Book Book1, Book Book2){
    if(ascending == true){
        if(Book1.title.compareToIgnoreCase(Book2.title) > 0) return 1;
        else if(Book1.title.compareToIgnoreCase(Book2.title) < 0) return -1;
        else return 0;
    }else{
        if(Book2.title.compareToIgnoreCase(Book1.title) < 0) return -1;
        else if(Book2.title.compareToIgnoreCase(Book1.title) > 0) return 1;
        else return 0;
    }
}
}
Run Code Online (Sandbox Code Playgroud)

我虽然可以在比较器上多做一些工作,但我真的很困惑如何模拟这样的事情,提前谢谢

Coo*_*ans 2

这听起来像是一个家庭作业问题。所以我将为您提供一些提示。

1. First see if Title1==Title2.
    1.1 if YES then see if year1==year2
            1.1.1 if YES then see if authorName1==authorName2
              1.1.1.1 If YES then they are equal (return 0)
              1.1.1.2 else if NO compare author1 and author2 (return 1 or -1)
     1.2 else if NO then compare year1 and year2 (return 1 or -1)
2. else if NO then compare title1 and title2 (return 1 or -1)
Run Code Online (Sandbox Code Playgroud)