Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.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 比较器<;?超级T>;as函数参数-如何使用?_Java_Comparator - Fatal编程技术网

Java 比较器<;?超级T>;as函数参数-如何使用?

Java 比较器<;?超级T>;as函数参数-如何使用?,java,comparator,Java,Comparator,我是初学者。我必须根据给定的比较器实现一种查找流的最小和最大元素的方法。如果流不包含任何元素,请调用: minMaxConsumer.accept(null, null); 我无法调用: minMaxConsumer.accept(test.min(order), test.max(order)); 代码: 公共静态void findMinMax( Stream展开可选值。test.min(X)不返回T;它返回一个可选值。返回的概念是:要么正好有一个值,要么没有值。空流当然会出现无值情况 请

我是初学者。我必须根据给定的比较器实现一种查找流的最小和最大元素的方法。如果流不包含任何元素,请调用:

minMaxConsumer.accept(null, null);
我无法调用:

minMaxConsumer.accept(test.min(order), test.max(order));
代码:

公共静态void findMinMax(

Stream展开可选值。
test.min(X)
不返回T;它返回一个
可选值。
返回的概念是:要么正好有一个值,要么没有值。空流当然会出现无值情况

请注意,即使修复了此问题,此代码在任何情况下都不起作用;count()操作是“终端”。它消耗流。因此,如果您先运行count操作,则流将被消耗,并且不可能运行min或max ops。除此之外,您不能先运行min,然后再运行max(因为这些也是终端操作,运行其中一个意味着另一个没有可查看的元素了)。

这样如何:

publicstaticvoidmain(字符串[]args){
findMinMax(
()->IntStream.range(1100).boxed(),
新的数字比较程序(),
(最小值,最大值)->System.out.println(“最小值:+min+“max”+max”)
);
}
公共静态void findMinMax(

供应商我应该为最小值创建流,为最大值创建另一个流吗?
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));
        }
    }
Compilation error
Main.java:12: error: incompatible types: Optional<T> cannot be converted to CAP#1
            minMaxConsumer.accept(test.min(order), test.max(order));