Java 8 Java 8流已被操作或关闭

Java 8 Java 8流已被操作或关闭,java-8,java-stream,Java 8,Java Stream,我正在尝试执行一个操作并将这些值添加到int[]中 我在流中收集了这些值,但在打印这些值时,我发现流被关闭了 我的代码如下: import java.util.*; import java.util.stream.*; import java.util.function.Supplier; public class Main { public static void main (String[]args) { IntStream mystream = IntStream.of (

我正在尝试执行一个操作并将这些值添加到int[]中

我在流中收集了这些值,但在打印这些值时,我发现流被关闭了

我的代码如下:

import java.util.*;
import java.util.stream.*;
import java.util.function.Supplier;
public class Main
{
  public static void main (String[]args)
  {
    IntStream mystream = IntStream.of (3, 4, 5, 9, 18, 54, 8, 7, 14, 3);
      Stream < int[] > p =
      mystream.boxed ().flatMap (a->mystream.mapToObj (b->{
                               return new int[]{a, b,
                                    (int)
                                    Math.
                                    sqrt ((a * a) + (b * b))};}));

    Supplier < Stream < int[] >> streamSupplier = ()->p;

    streamSupplier.get ().forEach (t->System.out.
                         println (t[0] + ", " + t[1] +
                              ", " + t[2]));
  }
}
import java.util.*;
导入java.util.stream.*;
导入java.util.function.Supplier;
公共班机
{
公共静态void main(字符串[]args)
{
IntStream mystream=IntStream.of(3,4,5,9,18,54,8,7,14,3);
流p=
mystream.boxed().flatMap(a->mystream.mapToObj(b->{
返回新的int[]{a,b,
(国际)
数学。
sqrt((a*a)+(b*b))};});
供应商>streamSupplier=()->p;
streamSupplier.get().forEach(t->System.out)。
println(t[0]+”,“+t[1]+
“,”+t[2]);
}
}
下面是我得到的错误:

您试图多次使用
mystream
引用的
IntStream

以下操作将消除该错误:

Stream<int[]> p =
    mystream.boxed ()
            .flatMap (a->IntStream.of (3, 4, 5, 9, 18, 54, 8, 7, 14, 3)
                                  .mapToObj (b->new int[]{a, b, (int) Math.sqrt (a*a + b*b)}));
流p=
mystream.boxed()
.flatMap(a->IntStream.of(3,4,5,9,18,54,8,7,14,3)
.mapToObj(b->newint[]{a,b,(int)Math.sqrt(a*a+b*b)});

也就是说,我还将删除您的
供应商
实例,并直接操作
p
(即
p.forEach(…)
),因为它只能被消费一次,所以用
供应商
包装它是没有意义的,您只能执行一个使用流的操作,否则,您将得到一个异常,表明流已经被操作或关闭

下面是如何修复它(通过一些重构):

List integerList=List.of(3,4,5,9,18,54,8,7,14,3);
int[]ints=新的int[]{3,4,5,9,18,54,8,7,14,3};
IntStream mystream=IntStream.of(ints);
p流=
mystream.boxed().flatMap(a->integerList.stream().map(b->
新的int[]{a,b,(int)Math.sqrt((a*a)+(b*b))}
));
p、 forEach(t->System.out.println(t[0]+”,“+t[1]+”,“+t[2]);

您的预期结果是什么?谢谢,这确实有效……)
List<Integer> integerList = List.of(3, 4, 5, 9, 18, 54, 8, 7, 14, 3);
int[] ints = new int[]{3, 4, 5, 9, 18, 54, 8, 7, 14, 3};
IntStream mystream = IntStream.of(ints);
Stream<int[]> p =
    mystream.boxed().flatMap(a -> integerList.stream().map(b ->
        new int[]{a, b, (int) Math.sqrt((a * a) + (b * b))}
    ));

p.forEach(t -> System.out.println(t[0] + ", " + t[1] + ", " + t[2]));