什么是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 对象的创建和方法的使用。