请老师帮忙看一下,错在了什么地方。谢谢!
Topic source所有对流的终端操作都会遍历流最终导致流管道关闭,也就是不能多次终端操作。
参见:Stream operations and pipelines
可以用IntStream.summaryStatistics()
一次性终端操作获得{count
, sum
, min
,average
, max
}。
参见:Find maximum, minimum, sum and average of a list in Java 8
后面intStream.allMatch(x -> (x-20)>=0)
等操作替代方法你自己再想一下办法吧。
你可以每执行一次前加***try(){}***语句
就像下面这样:
try(IntStream intStream = Arrays.stream(new int[] { 1,2,4,3,6,9,8,5,10,7,10 });){//找最大值 System.out.println("Max value: "+intStream.max());}
try(IntStream intStream = Arrays.stream(new int[] { 1,2,4,3,6,9,8,5,10,7,10 });){//找最小值 System.out.println("Min value: "+intStream.min());}
不过这样操作感觉也累赘,因为每次都需要初始化,应该有其他更简单的方法才对
- 1
未完成0000_642
运行第一个MAX后,其他的运行就报错。
如果仅留任意一条比如:max; min; average....,这些语句均可以单独执行。
就是放在一起来执行,象这样就不行。查了好久,没有办法,请帮忙看看。谢谢啦老师!!
import java.util.Arrays;
import java.util.stream.IntStream;
public class Demo08 {
public static void main(String[] args) {
IntStream intStream = Arrays.stream(new int[] { 1,2,4,3,6,9,8,5,10,7,10 });
//找最大值
System.out.println("Max value: "+intStream.max());
//找最小值
System.out.println("Min value: "+intStream.min());
//求和
System.out.println("Sum: "+intStream.sum());
//求平均数
System.out.println("Avaerage value: "+intStream.average());
//如果都小于20,则输出总和,否则输出“存在不符合要求的元素”
boolean a = intStream.allMatch(x -> (x-20)<0);
System.out.println(a ? intStream.average() : "存在不符合要求的元素" );
//如果有一个大于20,就输出综合,否则输出“所有元素均不满足要求”
boolean b = intStream.allMatch(x -> (x-20)>=0);
System.out.println(b ? intStream.average():"所有元素均不满足要求" );
}
}
运行结果为:
Min value: OptionalInt[1]
Exception in thread "main" java.lang.IllegalStateException: stream has already been operated upon or closed
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:229)
at java.base/java.util.stream.IntPipeline.reduce(IntPipeline.java:491)
at java.base/java.util.stream.IntPipeline.sum(IntPipeline.java:449)
at com.zhy.demo.Demo08.main(Demo08.java:17)