【问题标题】:Sorting ArrayList - JAVA [duplicate]排序ArrayList - JAVA [重复]
【发布时间】:2021-11-04 22:08:03
【问题描述】:

我有一个 csv 文件,其中包括 3 列(姓名、性别、年龄),而且它是不规则的(未排序)。我创建了一个名为“Person”的类,并通过 Person 对象将 csv 文件的每一列添加到 Araylist 中。之后我想对这个列表进行排序,但它没有排序。该列表与 csv 文件相同。我希望排序的代码如下。您能否检查一下为什么这段代码没有根据年龄对我的列表进行排序。

Comparator<Person> comparator = new Comparator<Person>() {
            
@Override
        
public int compare(Person first, Person second) {
                if (first.age < second.age) {
                    return first.age;
                } else {
                    return second.age;
                }
            }
        };
        Collections.sort(myList, comparator);
    enter code here

亲切的问候。

【问题讨论】:

  • 按照 javadocs 比较它的两个参数的顺序。返回负整数、零或正整数,因为第一个参数小于、等于或大于第二个。
  • 您需要返回 Integer.compare(first.age, second.age) 之类的内容,或者直接返回 first.age - second.age。正如可怕的袋熊指出的那样,您需要阅读 Comparator 上的 Javadoc。
  • 你能举个例子,你得到的结果是什么?

标签: java csv sorting arraylist collections


【解决方案1】:

删除 if else 条件。

    Comparator<Person> comparator = new Comparator<Person>() {
        @Override
        public int compare(Person first, Person second) {
            return first.getAge() - second.getAge();
        }
    };
    Collections.sort(persons, comparator);

Java 8

Collections.sort(persons, Comparator.comparingInt(Person::getAge));

【讨论】:

  • 非常感谢 Subha Chandra ;当您输入我的最终和可运行代码时: Comparator compare = new Comparator() { @Override public int compare(Person first, Person second) { return first.Age- second.Age; } }; Collections.sort(myList,comarator);
【解决方案2】:
myList.sort(Comparator.comparingInt(Person::getAge));

根据 Java 文档,

Comparator#compare

返回: 作为第一个参数的负整数、零或正整数小于、等于或大于第二个参数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-13
    • 1970-01-01
    • 2013-07-05
    • 2017-02-09
    • 2015-11-29
    • 1970-01-01
    • 2016-05-28
    相关资源
    最近更新 更多