我有一个 Employee 类,其中年龄和姓名是两个属性。
public class Employee{
private int age;
private String name;
public Employee(int age , String name){
this.age = age;
this.name = name;
}
public int getAge(){ return age; }
public String getName(){ return name; }
}
public class Test{
public static void main(String[] args){
List<Employee> emp = new ArrayList<>();
emp.add(new Employee(32 , "Andrew"));
emp.add(new Employee(9 , "Luis"));
emp.add(new Employee(22 , "Jake"));
emp.add(new Employee(31 , "Gorgee"));
}
}
在 main 方法中,我尝试使用 lambda 表达式对名称和长度进行排序,然后如果长度相同,我需要检查年龄的最后一位数字(按降序排列)。我尝试在 lambda 表达式中使用方法引用,但无法获取那里的长度。 Comparator.comparing (Employee::getAge)
Comparator<Employee> cmp = Comparator
.comparingInt(e -> e.getName().length())
.thenComparingInt(e -> -(getAge() % 10));
我不完全确定这是正确的 java,但你似乎知道 Comparator 和 lambda。
您可以使用
.reversed/reverseOrder
,但使用两个比较器会变得不太可读。我倾向于取最后一位数字的负数(我使用模 10)。