gpt4 book ai didi

java - 是否可以使用 Comparator 实现 reverseOrder() 方法?

转载 作者:塔克拉玛干 更新时间:2023-11-01 23:03:32 25 4
gpt4 key购买 nike

我一直在分析 Java SE 8 中的 Comparator 接口(interface)。现在,我很想知道如何使用 reverseOrder()使用实现 Comparator<T> 的类的方法界面。我写了一个示例程序来检查这一点。

class NaturalOrderString implements Comparator<String>{
@Override
public int compare(String o1, String o2) {
// TODO Auto-generated method stub
return o1.compareTo(o2);
}
}

public class App {
public static void main(String[] args) {
Comparator<String> mycom= new NaturalOrderString();

mycom.reverseOrder(); // can't use this
}
}

所以,现在我应该可以使用与 Comparator 相关的所有方法了。界面。但令人惊讶的是,我输入了 mycom.然后没有关于 reverseOrder() 方法的建议。为什么 ?类(class)NaturalOrderString工具 Comparator<T> .

所以,我应该接受 mycom要访问的对象 reverseOrder()方法。不是吗?

此外,我了解到列表中的排序是使用自然顺序进行的。因此,使用 Collection 类我可以访问 reverseOrder()方法。所以,在我的例子之前,我可以愉快地写

Collections.reverseOrder(mycom); // that's fine.

但我的问题是为什么我不能使用 reverseOrder()使用实现 Comparator<T> 的类的对象?而且,既然我们无法访问它,为什么 Java 包含 reverseOrder() Comparator<T> 中的方法界面 ?

或者,如果真的可以访问reverseOrder()通过关于我的代码的mycom对象,请给我一个例子。

最佳答案

基本上很多魔法在这里都是可能的。

为了反转排序,您只需要“反转”比较的结果。

可以研究这些foils .它们是用德语写的,但那里的文字不多——而且代码都是 java 的。该演示文稿提供了一些 lambda 基础知识;然后解释如何使用 lambda 和方法引用来开发一个对流进行排序/反向排序的整个系统;使用“访问器”对象从您打算排序的事物中检索任何属性。

例如导致:

interface Comparator<T> {
public int compare(T a, T b);
public default Comparator<T> reversed() {
return (a, b) –> compare(b, a) ;
}

现在可以实现该接口(interface),反向排序是免费的。

关于java - 是否可以使用 Comparator<T> 实现 reverseOrder() 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44453712/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com