如何在Java中对名称和年龄进行排序
我是Java 8的新手,我只想按名称排序。但条件是:如果名称重复,则应根据年龄对其进行排序。
例如我的输入是
tarun 28arun 29
varun 12
arun 22
并且输出应该是
arun 22arun 29
tarun 28
varun 12
但是我得到类似
varun 12arun 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