Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 反转由静态方法(函数接口)内联创建的比较器的更简单方法?_Java_Java Stream - Fatal编程技术网

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);