当前位置: 首页 > 面试题库 >

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

魏鹤轩
2023-03-14
问题内容

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

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

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


问题答案:

你有两种方法可以使用Arrays实用程序类

实现一个Comparator并将数组与比较器一起传递给sort方法,该方法将其作为第二个参数。
在对象所属的类中实现Comparable接口,并将数组传递给仅采用一个参数的sort方法。


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


 类似资料:
  • 我在下面有下面的Java代码,我正在尝试将其转换为Swift。如果有人能在这个问题上帮助我,我将非常感激。 谢谢

  • 问题内容: 我已经寻找了一段时间,想要一种对JSON对象进行排序的方法,如下所示: 并按字母顺序按值“ COMMERCIALNAME_E”得到: 我找不到任何可以做到这一点的代码。谁能给我些帮助? 问题答案: 将这些JSON解析为“对象集合”,然后使用比较器通过您喜欢的字段对其进行排序。 使用GSON将其解析为对象集合 例: 如果要从Object创建JSON。

  • 我有一个JSON数组: 结果为“数据”: 我怎么能有一个升序按“datesurder”? THX

  • 你知道为什么在对我的应用程序进行去压缩时,我的地址对象的属性顺序会发生变化吗?我需要检查它存储在数据库中的地址是否等于来自前端的地址。我正在使用对象映射器将对象转换为文本,以便我可以比较2个字符串,但由于这种情况,我总是得到假,因为顺序发生了变化,正如您在下面的图片中看到的那样。

  • 因此,我试图学习如何为类项目排序数组。我想知道如何对一个数组进行排序,从而对另一个数组进行排序。在下面的代码中,我可以对年份数组进行排序,但我如何才能使更改这一数组将名称和艺术家数组都更改为它们排列的数组呢?此外,如果你有任何建议,让代码对眼睛不那么苛刻,请告诉我,我正在努力掌握这个概念。

  • 问题内容: 如何按其字段之一(例如或)对对象数组进行排序? 问题答案: 使用usort,这是从手册改编而成的示例: 您还可以将任何callable用作第二个参数。这里有些例子: 使用匿名函数(来自PHP 5.3) 从班级内部 使用箭头函数(来自PHP 7.4) 另外,如果要比较数字值,则应使用“比较”功能。