Java 8 Java 8流已被操作或关闭
我正在尝试执行一个操作并将这些值添加到int[]中 我在流中收集了这些值,但在打印这些值时,我发现流被关闭了 我的代码如下: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 (
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]));