Java Arrays.sort使用Lambda,然后比较
我是Java新手,我正在尝试使用Lambda表达式和比较器。 我有一个具有其他getter和toString方法的公共类人员:Java Arrays.sort使用Lambda,然后比较,java,sorting,lambda,comparator,Java,Sorting,Lambda,Comparator,我是Java新手,我正在尝试使用Lambda表达式和比较器。 我有一个具有其他getter和toString方法的公共类人员: public class Person { private String name; private int age; private int computers; private double salary; public Person(String name, int age, int computers, double sala
public class Person {
private String name;
private int age;
private int computers;
private double salary;
public Person(String name, int age, int computers, double salary){
this.name = name;
this.age = age;
this.computers = computers;
this.salary = salary;
}
public String getName(){
return this.name;
}
public int getAge(){
return this.age;
}
public int getComputers(){
return this.computers;
}
public double getSalary(){
return this.salary;
}
@Override
public String toString(){
return "Name: " + getName() + ", age: "+ getAge() +
", N° pc: " + getComputers() + ", salary: " + getSalary();
}
}
现在我想对Person[]列表进行排序,首先按字符串(降序),然后按年龄(升序),然后按计算机数量(降序),最后按工资(升序)进行比较。我无法实现Comparable,因为如果我重写compareTo方法,它应该是升序或降序的,我需要两者。我想知道在不创建自己的比较器类的情况下是否有可能做到这一点。基本上我的代码几乎是正确的,但我不知道如何反转ThenComparingit(Person::getComputers)
正确的输出应为:
Name: Mark, age: 58, N° pc: 2, salary: 2400.0
Name: Flora, age: 18, N° pc: 1, salary: 800.0
Name: Flora, age: 24, N° pc: 5, salary: 1100.0
Name: Flora, age: 43, N° pc: 2, salary: 789.0
Name: Erik, age: 25, N° pc: 3, salary: 2000.0
Name: Erik, age: 25, N° pc: 1, salary: 1300.0
Name: Adam, age: 30, N° pc: 6, salary: 1500.0
Name: Adam, age: 30, N° pc: 6, salary: 1800.0
提前谢谢大家 我认为您只需要分别创建计算机
比较器
:
Comparator.comparing(Person::getName).reversed()
.thenComparingInt(Person::getAge)
.thenComparing(Comparator.comparingInt(Person::getComputers).reversed())
.thenComparingDouble(Person::getSalary)
我认为您只需要分别创建计算机
比较器
:
Comparator.comparing(Person::getName).reversed()
.thenComparingInt(Person::getAge)
.thenComparing(Comparator.comparingInt(Person::getComputers).reversed())
.thenComparingDouble(Person::getSalary)
为什么没有在Person类中定义
getters
?为什么没有在Person类中定义getters
?