使用两个比较器的 Lambda 表达式,其中一个是姓名长度,另一个是年龄,用于按降序比较最后一位数字

问题描述 投票:0回答:1

我有一个 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)

java lambda method-reference
1个回答
0
投票
Comparator<Employee> cmp = Comparator
    .comparingInt(e -> e.getName().length())
    .thenComparingInt(e -> -(getAge() % 10));

我不完全确定这是正确的 java,但你似乎知道 Comparator 和 lambda。

您可以使用

.reversed/reverseOrder
,但使用两个比较器会变得不太可读。我倾向于取最后一位数字的负数(我使用模 10)。

© www.soinside.com 2019 - 2024. All rights reserved.