我喜欢 Comparator
的新静态工厂方法,因为它们允许以非常简洁且不易出错的方式实现比较器。
但是实现Comparable
的推荐方法是什么?我们应该在 Comparable 实现中使用 Comparators 吗?
public MyClass implements Comparable<MyClass>{
...
public int compareTo(MyClass other){
Comparator<MyClass> naturalOrderComparator =
Comparator.comparing(MyClass::getFoo)
.thenComparing(MyClass::getBar);
return naturalOrderComparator.compare(this, other);
}
}
甚至在对大型集合进行排序时使用静态比较器来减少大量对象创建:
public MyClass implements Comparable<MyClass>{
private static final Comparator<MyClass> NATURAL_ORDER_COMPARATOR =
Comparator.comparing(MyClass::getFoo)
.thenComparing(MyClass::getBar);
...
public int compareTo(MyClass other){
return NATURAL_ORDER_COMPARATOR.compare(this, other);
}
}
或者是否有另一种推荐的方法来实现 Comparable with Java SE 8?
最佳答案
您自己的选项 2 几乎可以肯定是当前可用的最佳方式。它避免了分配,读起来非常好——尤其是当您将静态常量放在 compareTo
方法旁边时。
Java 8 中新的 Comparator.comparing
工厂方法非常容易阅读,更棒的是,很难搞砸——有很多很多方法可以手工编写不正确的比较,更多比我想记住的要多,而且工厂方法对其中的大多数是免疫的。尽管使用它们来编写 compareTo
方法而不是 Comparator
对象有点奇怪,但它仍然比替代方案更好。
关于Java 8 : implementing Comparable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46286383/