gpt4 book ai didi

java - 当提供自定义比较器或元素实现 Comparable 时,如何拆分方法中的逻辑?

转载 作者:太空宇宙 更新时间:2023-11-04 14:09:30 24 4
gpt4 key购买 nike

在方法中分离逻辑的最佳实践是什么,谁将使用 Comparable 元素,或者在创建时提供特定的 Comparator,具体取决于使用的类的构造函数?示例:

public class MinMax<E> {

private final Comparator<? super E> comparator;
private final boolean isSpecificComparatorProvided;

public MinMax() {
this.comparator = null;
this.isSpecificComparatorProvided = false;
........;
}

public MinMax(Comparator<? super E> comparator) {
this.comparator = comparator;
this.isSpecificComparatorProvided = true;
........;
}

private boolean isBigOrEqual(E e1, E e2) {
if (isSpecificComparatorProvided) {
Comparator<? super E> cpr = comparator;
int cmpr = cpr.compare(e1, e2);
return cmpr > -1;
} else {
@SuppressWarnings("unchecked")
Comparable<? super E> e1Comparable = (Comparable<? super E>) e1;
int cmprTo = e1Comparable.compareTo(e2);
return cmprTo > -1;
}
}

}

我是否始终在 isBigOrEqual() 方法中检查特定比较器?当没有提供特定的比较器时,是否还需要转换为 Comparable ?还有其他方法吗?

最佳答案

处理这个问题的最简单方法可能是仅实现 Comparator 的情况,然后当您没有传递 Comparator 时,编写一个仅适用于 Comparable 的方法。 (在 Java 8 中,这只是 Comparator.naturalOrder()。)

new Comparator<T> {
@Override public int compare(T a, T b) {
return a.compareTo(b);
}
};

TreeMap 出于性能原因不会这样做,但这样做更简单。

关于java - 当提供自定义比较器或元素实现 Comparable 时,如何拆分方法中的逻辑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28497521/

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