如何在Java中对对象数组进行排序?
我的数组不包含任何字符串。但它包含对象引用。每个对象引用都通过 toString 方法返回名称、id、作者和发布者。
public String toString() {
return (name + "\n" + id + "\n" + author + "\n" + publisher + "\n");
}
现在我需要按名称对该对象数组进行排序。我知道如何排序,但我不知道如何从对象中提取名称并对其进行排序。
我的数组不包含任何字符串。但它包含对象引用。每个对象引用都通过 toString 方法返回名称、id、作者和发布者。
public String toString() {
return (name + "\n" + id + "\n" + author + "\n" + publisher + "\n");
}
现在我需要按名称对该对象数组进行排序。我知道如何排序,但我不知道如何从对象中提取名称并对其进行排序。
你可以尝试这样的事情:
List<Book> books = new ArrayList<Book>();
Collections.sort(books, new Comparator<Book>(){
public int compare(Book o1, Book o2)
{
return o1.name.compareTo(o2.name);
}
});
您有两种方法可以做到这一点,这两种方法都使用数组实用程序类
例
class Book implements Comparable<Book> {
public String name, id, author, publisher;
public Book(String name, String id, String author, String publisher) {
this.name = name;
this.id = id;
this.author = author;
this.publisher = publisher;
}
public String toString() {
return ("(" + name + ", " + id + ", " + author + ", " + publisher + ")");
}
@Override
public int compareTo(Book o) {
// usually toString should not be used,
// instead one of the attributes or more in a comparator chain
return toString().compareTo(o.toString());
}
}
@Test
public void sortBooks() {
Book[] books = {
new Book("foo", "1", "author1", "pub1"),
new Book("bar", "2", "author2", "pub2")
};
// 1. sort using Comparable
Arrays.sort(books);
System.out.println(Arrays.asList(books));
// 2. sort using comparator: sort by id
Arrays.sort(books, new Comparator<Book>() {
@Override
public int compare(Book o1, Book o2) {
return o1.id.compareTo(o2.id);
}
});
System.out.println(Arrays.asList(books));
}
输出
[(bar, 2, author2, pub2), (foo, 1, author1, pub1)]
[(foo, 1, author1, pub1), (bar, 2, author2, pub2)]