我是初学者。我必须实现一种根据给定比较器查找流的最小和最大元素的方法。如果流不包含任何元素,请调用:
minMaxConsumer.accept(null, null);
Run Code Online (Sandbox Code Playgroud)
我无法调用:
minMaxConsumer.accept(test.min(order), test.max(order));
Run Code Online (Sandbox Code Playgroud)
码:
public static <T> void findMinMax(
Stream<? extends T> stream,
Comparator<? super T> order,
BiConsumer<? super T, ? super T> minMaxConsumer) {
Stream<T> test = Stream.concat(Stream.empty(),stream);
if(test.count()==0)
{
minMaxConsumer.accept(null, null);
}
else
{
minMaxConsumer.accept(test.min(order), test.max(order));
}
}
Run Code Online (Sandbox Code Playgroud)
错误:
Compilation error
Main.java:12: error: incompatible types: Optional<T> cannot be converted to CAP#1
minMaxConsumer.accept(test.min(order), test.max(order));
Run Code Online (Sandbox Code Playgroud)
打开可选项。test.min(X)不返回T;它返回一个Optional<T>。就像在其中一样,它返回一个概念:恰好有一个值,或者没有值。对于空流,当然会出现无值情况。
请注意,即使您解决了该问题,该代码也无法正常工作。count()操作为“终端”。它消耗流。因此,假设您首先运行计数操作,流将被消耗,并且无法运行最小或最大操作。除此之外,您不能先运行min,然后再运行max(因为这些也是终端操作,运行其中一个意味着另一个不再需要查看任何元素)。
| 归档时间: |
|
| 查看次数: |
78 次 |
| 最近记录: |