如何在 Java 中对对象数组进行排序?

新手上路,请多包涵

我的数组不包含任何字符串。但它包含对象引用。每个对象引用都通过 toString 方法返回名称、ID、作者和发布者。

 public String toString() {
        return (name + "\n" + id + "\n" + author + "\n" + publisher + "\n");
}

现在我需要按名称对该对象数组进行排序。我知道如何排序,但我不知道如何从对象中提取名称并对它们进行排序。

原文由 Tushar Monirul 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 557
2 个回答

您有两种方法可以做到这一点,都使用 Arrays 实用程序类

  1. 实现一个 Comparator 并将您的数组与比较器一起传递给将其作为第二个参数的 排序方法
  2. 在您的对象所在的类中实现 Comparable 接口,并将您的数组传递给仅采用一个参数的 排序方法

例子

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)]

原文由 A4L 发布,翻译遵循 CC BY-SA 3.0 许可协议

你可以尝试这样的事情:

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

原文由 zbess 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题