如何在Java中对名称和年龄进行排序

我是Java 8的新手,我只想按名称排序。但条件是:如果名称重复,则应根据年龄对其进行排序。

例如我的输入是

tarun  28

arun 29

varun 12

arun 22

并且输出应该是

arun   22

arun 29

tarun 28

varun 12

但是我得到类似

varun  12

arun 22

tarun 28

arun 29

表示仅按年龄或名称排序。

这是实现的代码:

POJO类:

class Person {

String fname;

int age;

public Person() {

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public String getFname() {

return fname;

}

public void setFname(String fname) {

this.fname = fname;

}

public Person(String fname, int age) {

this.fname = fname;

this.age = age;

}

@Override

public String toString() {

return fname + age;

}

}

测试类别:

public class Test {

public static void main(String[] args) {

List<Person> persons = new ArrayList<>();

persons.add(new Person("tarun", 28));

persons.add(new Person("arun", 29));

persons.add(new Person("varun", 12));

persons.add(new Person("arun", 22));

Collections.sort(persons, new Comparator<Person>() {

@Override

public int compare(Person t, Person t1) {

return t.getAge() - t1.getAge();

}

});

System.out.println(persons);

}

}

回答:

当前,您是a)仅按一个属性进行比较,b)并未真正利用Java 8的新功能。

使用Java

8,您可以使用方法引用和链接的比较器,如下所示:

Collections.sort(persons, Comparator.comparing(Person::getFname)

.thenComparingInt(Person::getAge));

这将Person首先按它们的实例比较两个实例fname,如果相等,则按它们的实例进行比较age(略微优化thenComparingInt以避免装箱)。

以上是 如何在Java中对名称和年龄进行排序 的全部内容, 来源链接: utcz.com/qa/417874.html

回到顶部