Java 反转由静态方法(函数接口)内联创建的比较器的更简单方法?
因为比较器是一个功能接口,所以我可以这样做Java 反转由静态方法(函数接口)内联创建的比较器的更简单方法?,java,java-stream,Java,Java Stream,因为比较器是一个功能接口,所以我可以这样做 Comparator<Instant> instantComparator = Instant::compareTo; 还有 Comparator.<Instant>reverseOrder() Comparator.reverseOrder() 如评论中所述 Comparator.<Instant>naturalOrder().reversed() Comparator.naturalOrder().rev
Comparator<Instant> instantComparator = Instant::compareTo;
还有
Comparator.<Instant>reverseOrder()
Comparator.reverseOrder()
如评论中所述
Comparator.<Instant>naturalOrder().reversed()
Comparator.naturalOrder().reversed()
现在的问题是:有没有比这更短/更漂亮的“内联”方式呢?这里有一个更短但更难看的版本:
Comparator<Instant> c = (a, b) -> b.compareTo(a);
comparatorc=(a,b)->b.compareTo(a);
对于方法引用,您能做的最好的事情是第一个(不进行真正丑陋的强制转换),因此您必须决定是要简短还是可读。您可以编写一个方法,该方法接受
比较器作为参数,并将其反转:
public static <T> Comparator<T> reverse(Comparator<T> comparator) {
return comparator.reversed();
}
如果Instant
实现了compariable
,您可以简单地执行以下操作:
Comparator<Instant> c = Comparator.<Instant>naturalOrder().reversed();
Comparator c=Comparator.naturalOrder().reversed();
使用比较器。reverseOrder()
可实现主要目的(将其反向排序):
List rev=ImmutableList.of(Instant.now(),Instant.now().plusSeconds(2),Instant.now().minusSeconds(5)).stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList());
由于您正试图颠倒自然顺序,您只需执行以下操作:
Comparator<Instant> c = Comparator.reverseOrder();
如果要反转由键提取器方法引用生成的比较器
,请参阅此问题:如果即时
实现可比
,则只需执行比较器.naturalOrder().reversed()
。
public static <T> Comparator<T> reverse(Comparator<T> comparator) {
return comparator.reversed();
}
reverse(Instant:compareTo)
Comparator<Instant> c = Comparator.<Instant>naturalOrder().reversed();
List<Instant> rev = ImmutableList.of(Instant.now(), Instant.now().plusSeconds(2), Instant.now().minusSeconds(5)).stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList());
Comparator<Instant> c = Comparator.reverseOrder();
Comparator<Instant> c = Collections.reverseOrder(Instant::compareTo);