我正在学习java Stream并且很难解决下面的问题。我被卡住的原因是因为我不知道如何处理Stream<Integer>
。
我偶然发现了&#34; count&#34;通过list.stream().count()
,但除此之外,我无法继续前进。请帮助我如何处理这些问题并告诉我为什么list.stream().count()
在这种情况下有效。到目前为止,我已经尝试了所有我学到的东西。
public class Question {
public static void main(String[] args) {
List<Integer>list = Arrays.asList(5,3,4,1,2);
System.out.println("sum by using Stream : " + sum);
System.out.println("count by using Stream: " + count);
System.out.println("average by using Stream : " + avg);
System.out.println("sort by using Stream");
}
}
答案 0 :(得分:15)
IntSummaryStatistics stats = Arrays.asList(1,2,3,4)
.stream()
.mapToInt(Integer::intValue)
.summaryStatistics();
stats.getSum();
stats.getCount();
stats.getAverage();
对于已排序的,您必须再次流式传输。
答案 1 :(得分:9)
为什么list.stream().count()
有效而list.stream().sum()
不起作用的原因是因为list.stream()
返回Stream<Integer>
并且有Stream::count
方法,但是不是Stream::sum
或Stream::average
。
要获得总和和平均值,首先必须将Stream<Integer>
中的每个整数值映射到list.stream()
IntStream
。这是Stream的int原始特化。这可以使用Stream::mapToInt
方法完成:
list.stream().mapToInt(Integer::intValue)
这样做可以使用方法IntStream::sum
和IntStream::average
:
System.out.println("sum by using Stream : " + list.stream().mapToInt(Integer::intValue).sum());
System.out.println("average by using Stream : " + list.stream().mapToInt(Integer::intValue).average());
或者甚至更好,您可以使用IntStream::summaryStatistics
来获得总和,计数和平均值(也包括最小值和最大值):
System.out.println("sum, count, avg, min and max using Stream : " + list.stream().mapToInt(Integer::intValue).summaryStatistics());
要对值进行排序,您可以使用Stream::sorted
方法:
System.out.println("sort by using Stream: " + list.stream().sorted().collect(Collectors.toList()));
Here是一篇很好的文章,可以帮助您了解如何使用Java 8 Stream Api。
答案 2 :(得分:3)
你可以这样做:
List<Integer> list = Arrays.asList(5,3,4,1,2);
System.out.println("sum by using Stream : " + list.stream().mapToInt(Integer::intValue).sum());
System.out .println("count by using Stream: " + list.stream().mapToInt(Integer::intValue).count());
System.out.println("average by using Stream : " + list.stream().mapToInt(Integer::intValue).average());
System.out.println("sort by using Stream: " + list.stream().sorted().collect(Collectors.toList()));
答案 3 :(得分:1)
您应该使用mapToInt
或mapToDouble
您可以按forEach(System.out::println)
List<Integer> list = Arrays.asList(5,3,4,1,2);
System.out.println("sum by using Stream : " + list.stream().mapToInt(Integer::intValue).sum());
System.out .println("count by using Stream: " + list.stream().count());
System.out.println("average by using Stream : " + list.stream().mapToInt(Integer::intValue).average());
System.out.println("sort by using Stream: " );
list.stream().sorted().forEach(System.out::println);