因为Comparator<T>是一个功能接口,所以我可以这样做
Comparator<Instant> instantComparator = Instant::compareTo;现在我可以逆转它了:
Comparator<Instant> instantComparatorReversed = instantComparator.reversed();不过,我可以直接这样做:
Comparator<Instant> cannotDoThis = (Instant::compareTo).reversed();这是有意义的,因为Instant::compareTo毕竟只是一种方法,在这种情况下,它就是这样的。只有这样才能做到这一点:
Comparator<Instant> instantComparatorReversedWithCast = ((Comparator<Instant>)Instant::compareTo).reversed();也有
Comparator.<Instant>reverseOrder()正如评论中提到的
Comparator.<Instant>naturalOrder().reversed()现在的问题是:有没有比这更短、更漂亮的“内联”方式?
发布于 2018-04-10 09:43:20
您可以编写一个接受Comparator作为参数并将其反转的方法:
public static <T> Comparator<T> reverse(Comparator<T> comparator) {
return comparator.reversed();
}您可能会在一个充满实用方法的类中这样做,并静态地导入该方法。
然后你就可以:
reverse(Instant:compareTo)发布于 2018-04-10 09:37:57
下面是一个更短但更丑的版本:
Comparator<Instant> c = (a, b) -> b.compareTo(a);使用方法引用,您可以做的最好是第一个(没有进入真正丑陋的转换),所以您将不得不决定您想要简短还是可读性。
发布于 2018-04-10 10:12:53
如果Instant实现了Comparable,您可以简单地执行以下操作:
Comparator<Instant> c = Comparator.<Instant>naturalOrder().reversed();https://stackoverflow.com/questions/49750149
复制相似问题