Java8 - java.util.LongSummaryStatistics类示例

417 阅读3分钟

什么是java8中的LongSummaryStatistics类?

LongSummaryStatistics 是一个用于收集统计数据的类,在长数据上使用总和、最大、最小、平均和计数操作。

Java.util 包提供了三个类 ,IntSummaryStatistics用于整数数据, DoubleSummaryStatistics 用于双数数据, LongSummaryStatistics用于长数据。这些类与流和lambda表达式一起工作。

LongSummaryStatistics类的接受方法示例

它提供了accept()方法来记录用于计算的值。

import java.util.LongSummaryStatistics;

public class LongSummaryStatisticsExample {
    public static void main(String[] args) {
        LongSummaryStatistics statsPrimitive = new LongSummaryStatistics();
        statsPrimitive.accept(17);
        statsPrimitive.accept(6);
        statsPrimitive.accept(4);
        statsPrimitive.accept(2);
        statsPrimitive.accept(18);
        statsPrimitive.accept(51);
        System.out.println(statsPrimitive);
    }
}

输出

LongSummaryStatistics{count=6, sum=98, min=2, average=16.333333, max=51}  

LongSummaryStatistics流阵列lambda表达式示例

下面的例子 -

  • 使用List.of() 工厂静态方法创建了一个学生列表
  • 给定对象流并将其映射到mapToLong方法,该方法需要toLongFunction--一个接受对象并产生长输出的函数接口。
  • 最后,调用summaryStatistics()方法来返回该对象。
  import java.util.List;
import java.util.LongSummaryStatistics;

public class Summary2 {

    public static void main(String[] args) {
        List empLists = List.of(new Student(15000), new Student(2000), new Student(21000), new Student(2500));
        LongSummaryStatistics sumaryStats = empLists.stream().mapToLong((value) -> value.getRank()).summaryStatistics();
        System.out.println(sumaryStats);
    }
}

class Student {
    long rank;

    public Student(long rank) {
        super();
        this.rank = rank;
    }

    public long getRank() {
        return rank;
    }
}

输出

LongSummaryStatistics{count=4, sum=40500, min=2000, average=10125.000000, max=21000}  

收集器summaryizingLong()方法的例子

Collectors.summarizingLong() 是一个定义在java.util.stream 包中的静态方法。

语法

 Collector summarizingLong(ToLongFunction mapper)  

下面是一个例子

import java.util.Arrays;
import java.util.List;
import java.util.LongSummaryStatistics;
import java.util.stream.Collectors;

public class LongSummaryStatisticsExample {

    public static void main(String[] args) {
        List list = Arrays.asList(5l, 4l, 1l, 7l, 3l);
        LongSummaryStatistics summaryStats = list.stream().collect(Collectors.summarizingLong(Long::longValue));
        System.out.println(summaryStats);

    }
}

输出是

LongSummaryStatistics{count=5, sum=20, min=1, average=4.000000, max=7}  

上面的例子解释如下:

  • 从一个数组创建一个列表。
  • 使用stream()reduce操作将列表转为Stream,用Collectors.sumplizingLong参数收集到,然后返回LongSummaryStatistics

LongStream summaryStatistics()方法示例

LongStream是Long数据类型的一个流版本,支持顺序和并行操作。

summaryStatistics() 方法返回LongSummaryStatistics ,其中包含长流数据的汇总统计。

import java.util.LongSummaryStatistics;
import java.util.stream.LongStream;

public class LongSummaryStatisticsExample {

    public static void main(String[] args) {
        LongStream longStream = LongStream.of(5, 4, 1, 7, 3);
        LongSummaryStatistics summaryStats = longStream.summaryStatistics();
        System.out.println(summaryStats);

    }
}

输出

LongSummaryStatistics{count=5, sum=20, min=1, average=4.000000, max=7}

以下是上述程序的顺序步骤:

  • 首先,使用LongStream.of()方法创建一个长流。
  • doubleStream中的summaryStatistics将收集封装在一个
    对象中的统计数据。
  • 这个对象有像计数、总和、最小、平均和最大的双倍数据的总结数据。
  • 这是Stream API的一个缩减操作,它接受一个输入值数组,并给出一个数据摘要的输出。

LongSummaryStatistics方法

以下是java支持的长数据的汇总统计操作的内置方法

方法说明
接受(long)记录长数据,用于汇总操作。
Combine(LongSummaryStatistics)将其他摘要统计合并到此,不返回。
getAverage()返回对长值列表的平均操作,如果不存在任何值则返回0
getCount()返回记录的长值列表的计数
getMax()返回长值列表中的最大值。如果加入NaN值,则返回NaN,如果没有加入任何值,则返回MAX_VALUE值。
getMin()如果添加了NaN值,则返回NaN,如果没有添加任何值,则返回MIN_VALUE值,从一个长列表中返回最小值。
getSum()返回列表中所有长值的总和。如果没有添加任何值,则返回0。

总结

通过实例学习了LongSummaryStatistics 对象的创建和方法的使用。