Java 无类排序源代码

Java 无类排序源代码,java,Java,面试官在我的一次面试中提出了一个问题 我们有Employee类,其中包含id、firstName和lastName字段以及这些字段的getter和setter。我们没有这个类的源代码,它在JAR中。我们使用Employee实例作为TreeMap中的键。现在,我们希望根据员工id字段对该树映射进行排序 我知道我们可以使用Compariable界面进行排序,但是如果没有源代码,我们如何使用它呢?基于: 由于您没有源代码,因此无法使用该接口。面试官的目标就是让你选择另一种方式。这个替代方案是使用一个

面试官在我的一次面试中提出了一个问题

我们有
Employee
类,其中包含
id
firstName
lastName
字段以及这些字段的getter和setter。我们没有这个类的源代码,它在JAR中。我们使用
Employee
实例作为
TreeMap
中的键。现在,我们希望根据
员工
id
字段对该
树映射进行排序

我知道我们可以使用
Compariable
界面进行排序,但是如果没有源代码,我们如何使用它呢?

基于:

由于您没有源代码,因此无法使用该接口。面试官的目标就是让你选择另一种方式。这个替代方案是使用一个

我将让您搜索如何使用它()

您有两个选择:

  • 子类
    Employee
    并使派生类实现
    compariable
  • 编写一个
    比较器
    ,并将其作为参数传递给
    树映射的构造函数
  • 第一个问题比它的价值更麻烦,因为你正在处理一个不同的类。让我们看看如何使用
    比较器

    final Comparator<Employee> employeeComparator = Comparator
            .comparing(Employee::getLastName)
            .thenComparing(Employee::getFirstName);
    final SortedMap<Employee, String> map = new TreeMap<>(employeeComparator);
    
    final Comparator employeeComparator=Comparator
    .比较(员工::getLastName)
    .Then比较(雇员::getFirstName);
    最终分类地图=新树状图(员工比较表);
    

    这将comparator定义为一个Java 8 lambda,它首先比较姓氏,然后比较姓氏。

    您可以使用comparator。为什么源代码与此相关?使用comparator,例如@lexicore,因为您没有源代码,所以无法实现该类。他们希望有另一种选择,也就是说,答案是你可以在网上给出答案。这是一个测试,看看您对
    TreeMap
    有多熟悉,它是Java运行时库中比较常见的类之一