如何在Java中按字母顺序对自定义对象进行排序?

我将如何按字母顺序对inventory数组进行排序?

这是我正在进行的项目。 我试图使用Arrays.sort(inventory); 但它不起作用。

有人可以告诉我我做错了什么吗?

书类:

 //Filename: BookStore.java //Description: Purpose is to display what books are in stock and ISBN, title, author name, year, publishers name, and price. //Author Name: David Finocchi //Date: 01/19/2014 import java.util.Arrays; import java.text.DecimalFormat; class Book { protected long isbn; protected String title; protected String autName; protected int year; protected String pubName; protected double price; protected int quantity; // Constructor public Book(long isbn, String title, String autName, int year, String pubName, double price) { setIsbn(isbn); setTitle(title); setAut(autName); setYear(year); setPub(pubName); setPrice(price); } // methods for class variables public long getIsbn() { return isbn; } public void setIsbn(long isbn) { this.isbn = isbn; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getAut() { return autName; } public void setAut(String autName) { this.autName = autName; } public int getYear() { return year; } public void setYear(int year) { this.year = year; } public String getPub() { return pubName; } public void setPub(String pubName) { this.pubName = pubName; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } public int getQuantity() { return quantity; } public void setQuantity(int quantity) { this.quantity = quantity; } public double calTotal() { return price; } //toString for the book array public String toString() { return "ISBM: " + isbn + "\n" + "Title: " + title + "\n" + "Author's Name: " + autName + "\n" + "Year Published: " + year + "\n" + "Publisher's Name: " + pubName + "\n" + "Price: $" + price + "\n\n"; } }// end class Book 

电子书课程:

 class EBook extends Book { private String website; //constructor and super public EBook(long isbn, String title, String autName, int year, String pubName, double price, String website) { super(isbn, title, autName, year, pubName, price); setWebsite(website); } // get and set public String getWebsite() { return website; } public void setWebsite(String website) { this.website = website; } public double discount() { return price * 0.10; } DecimalFormat money = new DecimalFormat("$0.00"); //toString for the Book array public String toString() { return "ISBM: " + isbn + "\n" + "Title: " + title + "\n" + "Author's Name: " + autName + "\n" + "Year Published: " + year + "\n" + "Publisher's Name: " + pubName + "\n" + "Price: " + money.format(price) + "\n" + "Website: " + website + "\n" + "Discount: " + money.format(discount()) + "\n\n"; } }//end class EBook 

BookStore类(使用main方法):

 public class BookStore { //main method public static void main(String[] args) { // book array Book[] inventory = new Book[5]; EBook a = new EBook(75260012L, "David goes to School", "David Shannon", 2010, "Shannon Rock", 11.98, "http://www.tinyurl.qqwert67o9"); Book b = new Book(7423540089L, "No David!", "David Shannon", 2009, "Shannon Rock", 12.99); Book c = new Book(743200616L, "Simple Abundance", "Sarah Breathnach", 2009, "Scribner", 14.99); EBook d = new EBook(78137521819L, "The very hungry caterpillar", "Eric Carle", 2005, "Philomel Books", 13.99, "http://www.tinyurl.fguopt8u90"); Book e = new Book(9781416987116L, "We're going on a bear hunt", "Michael Rosen", 2009, "McElderry", 15.99); inventory[0] = a; inventory[1] = b; inventory[2] = c; inventory[3] = d; inventory[4] = e; double total = 0.0; //print text to user System.out.println("Bookstore Items:" + "\n"); //print array for (int i = 0; i < inventory.length; i++) { System.out.println(inventory[i]); total += inventory[i].getPrice(); } //print total DecimalFormat money = new DecimalFormat("$0.00"); System.out.printf("Total Inventory Value: " + money.format(total)); } }// end class BookStore 

Arrays.sort()使用对象的自然顺序 ,这意味着您需要它们来实现Comparable ,否则您将获得不可靠的排序行为。

简单地说,如果你想按标题对每本书进行排序,那么让它实现Comparable

 public class Book implements Comparable { public int compareTo(Book otherBook) { return title.compareTo(otherBook.getTitle()); } } 

你也想为子类EBook做同样的事情。

你不能通过直接将该类放到array.sort来对类的字符串属性进行排序。 如果使用数组列表而不是数组,则可以使用Collection.sort()使用book对象内的字段对列表进行排序。

public static void main(String [] args){

 // book array ArrayList inventory = new ArrayList(); inventory.add (new Book(9781416987116L, "We're going on a bear hunt", "Michael Rosen", 2009, "McElderry", 15.99)); inventory.add (new Book(743200616L, "Simple Abundance", "Sarah Breathnach", 2009, "Scribner", 14.99)); inventory.add(new EBook(75260012L, "David goes to School", "David Shannon", 2010, "Shannon Rock", 11.98, "http://www.tinyurl.qqwert67o9")); inventory.add (new Book(7423540089L, "No David!", "David Shannon", 2009, "Shannon Rock", 12.99)); inventory.add (new EBook(78137521819L, "The very hungry caterpillar", "Eric Carle", 2005, "Philomel Books", 13.99, "http://www.tinyurl.fguopt8u90")); Collections.sort(inventory, new Comparator() { public int compare(Book result1, Book result2) { return result1.getTitle().compareTo(result2.getTitle()); } }); for (int i =0;i 

}