我是 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以避免拳击)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)