gpt4 book ai didi

Java 复杂排序

转载 作者:搜寻专家 更新时间:2023-10-31 19:41:46 24 4
gpt4 key购买 nike

我卡在我有一个包含三个变量的 Object Book

String title
int Year
String authorName

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

这是我的一些代码:

图书类:

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();
}

}

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;
}
}

标题比较器:

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;
}
}
}

虽然我可以在比较器上做更多的工作,但我真的对如何建模这样的东西很困惑,提前致谢

最佳答案

编写 3 个比较器类,每个比较器类比较一个特定的属性,然后编写一个整体比较器类,它采用一个有序的比较器列表。

或者使用像org.apache.commons.collections.comparators.ComparatorChain这样的库中的一些便利类.

编辑:

OP 问:

how could I write that overall comparator:

类似于:

// private List<Comparator<?>> comparators;  // initialized in constructor

// compare method(book1, book2):
// note that while result == 0, books have had equal attributes so far
// once result is != 0, the books are now ordered - no need to compare further
// if we run out of comparators and result still == 0, books are equal.

// initialize iterator to list of comparators
// int result = 0;
// while result == 0 && still more comparators
// get current comparator from iterator
// result = comparator.compare(book1, book2); // compare current attribute
// end-while
// return result

关于Java 复杂排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4770788/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com