我想了解Comparator类的comparing方法的定义。我会留下一些代码,以防它有助于解释。我正在使用一个名为Person的类,它基本上存储一个名字和一个姓氏。可以使用get方法检索此数据。
public class Person {
private final String name;
private final String lastname;
public Person(String name, String lastname) {
this.name = name;
this.lastname = lastname;
}
public String getName() { return name; }
//...
}
然后,我创建了一个人员列表:
List<Person> list = Arrays.asList(
new Person("Juan", "García"),
new Person("Ana", "Martínez"),
...
);
我一直在测试不同的方法来对这个人员列表进行排序。在其他可能性中,我发现了这个:
list.sort(Comparator.comparing(Person::getName));
我明白这些行的作用。基本上,此列表是使用比较器排序的,该比较器使用排序键(Person的名称)进行比较。此类键是使用对属于Person类的getName方法的引用提取的。
但是,我也喜欢了解幕后发生了什么。我的问题是比较
方法。Java留档这样定义方法:
static <T,U extends Comparable<? super U>> Comparator<T> comparing(Function<? super T,? extends U> keyExtractor)
特别是,我正在努力解决泛型类型定义:<代码>
T表示比较器类型,而U表示键类型,对吗?所以为什么U需要扩展比较
在参数中,该函数与属于T
的任何超类的对象一起工作,并返回属于U
的任何子类的对象(
我希望我的怀疑是明确的。还有,很抱歉解释得太长了。
让我们考虑一下上述方法的签名比较静态
>
T
是被比较对象的类型,在提到的情况下是Person
U扩展
<代码>功能
我在这里看到三个主要的困惑:
这是对U
(键的类型)的约束,指定了U
可以是什么特定类型。它说U
必须是可比的。有道理,对吧?尖括号中的部分指定了“什么东西可以U
比较?”例如,可比
你可能想知道为什么它不说“
U
必须与U
可比”,即U扩展为可比
假设我有一个键提取器,它接受一个对象,并返回它的输出作为要比较的键(这是一个非常不常见的比较对象,但为了这个示例,请注意:D)
Function<Object, String> stringExtractor = Object::toString;
现在我想要一个比较动物的比较器。我可以使用此stringExtractor作为比较的参数吗?我当然可以:
Comparator<Animal> comparator = Comparator.comparing(stringExtractor);
所有动物都有一个toString方法,因为它们毕竟是Object的子类!这就是为什么key extractor参数采用超类为T的函数,以允许我们传递上述内容。如果是<代码>功能
同样,我们希望比较尽可能多的东西。
这实际上是完全不必要的。除非您像这样明确指定
T
和U
:
Comparator.<Foo, Animal>comparing(Foo::getDog);
它是否是功能没有区别
本文向大家介绍Java Comparator比较器实例解析,包括了Java Comparator比较器实例解析的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了Java Comparator比较器实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 说几点需要注意的,提醒自己即可: 以下是单独定义一个比较器的类,实现了Comparat
问题内容: 我头疼,调试困难。我正在尝试比较两个通用值,以便可以根据值将它们插入到数组中进行排序。这是我第一次使用Comparable和Comparator界面,因此围绕这些问题的任何其他建议都是不错的选择。 这是我的班级设置方式: put()方法: 这些是我要实现的compareTo()和compare方法。 我遇到的第一个问题是compareTo()方法中的问题,它以“ this”为中心。该错
我正在做一个关于java类的介绍的作业,该作业要求使用方法将温度从摄氏转换为华氏,反之亦然。它需要使用三种比较方法,而我无法弄清楚该把什么放进去。以下是说明: 三种比较方法: -此方法将另一个温度作为参数,如果调用对象具有与other相同的温度,则返回true,否则返回false。注意,摄氏温度可以等于华氏温度,如上式所示。 -如果调用对象的温度低于其他温度,则此方法将返回true,否则返回fal
本文向大家介绍对比Java中的Comparable排序接口和Comparator比较器接口,包括了对比Java中的Comparable排序接口和Comparator比较器接口的使用技巧和注意事项,需要的朋友参考一下 Comparable Comparable 是排序接口。 若一个类实现了Comparable接口,就意味着“该类支持排序”。 即然实现Comparable接口的类支持排序,假设现在存在
对于某个项目,我必须按地区和名称订购一些数字。首先,它们按面积从大到小排序,如果它们一致,则按字母顺序排序。在一个名为的类中,我有一个类型如下的内部类: 如果我想从另一个类对一组进行排序,我该如何做?我认为最好的方法是下面的,但失败了(
问题内容: 我想比较Java中的类类型。 我以为我可以这样做: 我想比较一下是否传递给函数的obj是从MyObject_1扩展而来的。但这是行不通的。似乎getClass()方法和.class提供了不同类型的信息。 如何比较两个类类型,而不必创建另一个伪对象来比较类类型? 问题答案: 试试这个: 由于继承,这对接口也有效: 有关instanceof的更多信息,请访问:http : //mindpr