使用java Stream获取总和,平均值和排序

时间:2018-02-21 12:58:26

标签: java java-8 java-stream

我正在学习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");
    }
}

4 个答案:

答案 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::sumStream::average

要获得总和和平均值,首先必须将Stream<Integer>中的每个整数值映射到list.stream() IntStream。这是Stream的int原始特化。这可以使用Stream::mapToInt方法完成:

list.stream().mapToInt(Integer::intValue)

这样做可以使用方法IntStream::sumIntStream::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)

您应该使用mapToIntmapToDouble

您可以按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);