Java 如何为IntStream创建StreamSupplier

Java 如何为IntStream创建StreamSupplier,java,java-8,java-stream,Java,Java 8,Java Stream,这是我第一次用Java处理流。我首先创建了一个包含1000个数字的IntStream。现在,当我执行多个操作时,我遇到了一个错误。在进一步的探索中,我了解到流是在一次遍历之后消耗的,因此我们同样需要供应商。我尝试了各种方法,但无法为IntStream编号创建供应商。我将非常感谢您的帮助。 请注意,我不需要帮助创建1000个随机数。相反,我需要帮助为IntStream创建一个供应商 import java.util.Random; import java.util.stream.IntStrea

这是我第一次用Java处理流。我首先创建了一个包含1000个数字的IntStream。现在,当我执行多个操作时,我遇到了一个错误。在进一步的探索中,我了解到流是在一次遍历之后消耗的,因此我们同样需要供应商。我尝试了各种方法,但无法为IntStream编号创建供应商。我将非常感谢您的帮助。 请注意,我不需要帮助创建1000个随机数。相反,我需要帮助为IntStream创建一个供应商


import java.util.Random;
import java.util.stream.IntStream;
import java.util.function.Supplier;
import java.util.stream.Stream;

public class ArrayApplication {

    public static void main(String[] args) {
        Random rand = new Random();
        IntStream numbers = rand.ints(1000, 1, 11);
        Supplier<Stream<Integer>> streamSupplier = () -> numbers.boxed();
        // The statement below works fine
        streamSupplier.get().forEach(System.out::println);
        // The statement below doesn't works 
        System.out.println(streamSupplier.get().count());
        
    }
}


导入java.util.Random;
导入java.util.stream.IntStream;
导入java.util.function.Supplier;
导入java.util.stream.stream;
公共类数组应用程序{
公共静态void main(字符串[]args){
Random rand=新的Random();
IntStream number=rand.int(1000,1,11);
供应商流供应商=()->编号。装箱();
//下面的陈述很好
streamSupplier.get().forEach(System.out::println);
//下面的陈述不起作用
System.out.println(streamSupplier.get().count());
}
}

在java中,设计时只能使用一次流。您的供应商每次返回相同的流,因此第二次使用

// The statement below doesn't works 
System.out.println(streamSupplier.get().count());
这是违法的

供应商的基础不应是流。 您可以尝试以下方法:

public static void main(String[] args) {
   Random rand = new Random();
   List<Integer> numbers = rand.ints(1000, 1, 11).boxed().collect(Collectors.toList());
   Supplier<Stream<Integer>> streamSupplier = () -> numbers.stream();
   streamSupplier.get().forEach(System.out::println);
   System.out.println(streamSupplier.get().count());
}
publicstaticvoidmain(字符串[]args){
Random rand=新的Random();
列表编号=rand.int(1000,1,11).boxed().collect(Collectors.toList());
供应商流供应商=()->number.stream();
streamSupplier.get().forEach(System.out::println);
System.out.println(streamSupplier.get().count());
}
你试过这个吗

Supplier<IntStream> streamSupplier = () -> rand.ints(1000,1,11);
supplierstreamsupplier=()->rand.int(1000,1,11);
如果要重复相同的数字,可以将种子设置为“随机”

Supplier<IntStream> streamSupplier = () -> {
       rand.setSeed(23);
       return rand.ints(1000,1,11);
     };
供应商流供应商=()->{
兰特固定种子(23);
返回兰特整数(1000,1,11);
};

为什么你不能做一个供应商呢?我也试过了,但是我做不到。我做了这个
supplierstreamsupplier=()->数字
但仍然得到相同类型的错误。您是否专门尝试返回相同的随机数?否。范围内的任何1000个随机数都可以。唯一的限制是应该使用IntStream。否则我可以使用数组或列表。然后我建议您阅读关于lambdas的基本文档<代码>供应商i=()->rand.ints(1000,1,11)是的,我知道它可以使用一次。我需要一个解决上述问题的有效解决方案。@SushantPradhan,如果你进一步阅读答案,你会找到它。我受到一个问题的限制,该问题规定不能使用数组对象和列表对象。