我一直在阅读有关Java 8的内容,但尚未尝试过。所以,我试图用它做简单的数学运算。Java流:在Int流上执行多个数字操作的一个班轮
我试图找到的平均,总和,最大值,并使用从Java 8的新技术我想收集在打印出所有的数字第一列表的最小值,然后打印出平均值,求和,分,和最大。
以下是我有:
List<Integer> list = Arrays.asList(5,6,2,12,7,9,15,18,-1,-8);
OptionalDouble average = list.stream().mapToInt(num -> num).average();
int sum = list.stream().mapToInt(num -> num).sum();
//sort the numbers, so that min and max are found in array
int[] arr = list.stream().mapToInt(a -> {System.out.println(a); return a;}).sorted().toArray();
System.out.println("Average: " + average.getAsDouble());
System.out.println("Sum: " + sum);
System.out.println("The minimum is: " + arr[0] + ", and maximum: " + arr[arr.length-1]);
有没有办法用一个流启动,而不是把3个不同的数据流来做到这一点?是否有一种方法可以在单个流源上执行多个并行操作?
而且,如果我是让我从终端/主机进行操作的数字,而不是它已经在集合中存在。如果正确地记得Java 8 In Action
描述的存储Collections
和Streams
之间的差异作为Collections
已经具有所有它们的元素之一,而Streams
连续地从源,逐个元素得到他们的数据。因此,这与通过控制台逐个提供数字的用户类似。所以,我的第二个问题是,是否有可能使数据源一个流的System.in
而不必进行从用户输入的第一List
,然后转换该List
到流?
'mapToInt(一 - > {的System.out.println(A);返回;})' - 这是不推荐;更喜欢'peek(System.out :: println)'。 –
@LouisWasserman当我需要使用元素执行某些操作时,是否也应该使用'peek()',但不需要将它沿着流传递?示例如果我想在数组中创建一个数字串:'StringJoiner nums = new StringJoiner(“,”,“提供的数字是:”,“。\ n”)',然后是stream:'list.stream ().peek(a - > nums.add(a.toString()))。mapToDouble(a - > a)。summaryStatistics();'OR还有更好的方法来使用流元素进行副操作吗? – Abdul
请不要。为这样的事情使用适当的收集器。 –