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运行时库中比较常见的类之一