DoubleSummaryStatistics 及其相关类之-简介

1. DoubleSummaryStatistics 使用简介

在Java 8中,DoubleSummaryStatistics 类被引入作为 java.util 包的一部分。它是一个用于收集统计数据(如计数、最小值、最大值、和、平均值等)的类,特别适用于处理 double 类型的数据。

DoubleSummaryStatistics 是一个用于统计 double 值数据的类,能够同时计算出以下几个统计数据:

  • 总数(count)
  • 总和(sum)
  • 最小值(min)
  • 最大值(max)
  • 平均值(average)

它提供了一组方法用于更新和检索这些统计数据,并且与 Java 8 中的 Stream API 无缝集成。

2. 使用场景和优缺点

a. 使用场景
  1. 数据分析:在处理大量 double 类型数据时,使用 DoubleSummaryStatistics 可以轻松获取关键统计数据。
  2. 数据流处理:与 Stream API 结合使用,简化统计操作。
  3. 实时统计:在需要不断更新统计数据的实时系统中,DoubleSummaryStatistics 提供了便捷的方式。
b. 优点
  1. 简洁性:简化了统计数据的计算,避免手动编写累加器。
  2. 性能:适用于大数据集的处理,结合并行流使用时具有良好的性能。
  3. 易用性:提供了开箱即用的方法来获取统计数据。
c. 缺点
  1. 单一用途:主要用于 double 类型数据的统计,其他类型数据需要使用对应的类,如 IntSummaryStatisticsLongSummaryStatistics
  2. 内存占用:在处理极大数据集时,内存占用可能会增加。

3. 基本用法

创建 DoubleSummaryStatistics 对象,并使用 accept 方法添加数据,然后使用相应的方法获取统计结果。

import java.util.DoubleSummaryStatistics;

public class BasicUsage {
    public static void main(String[] args) {
    
        // DoubleStream doubleStream= DoubleStream.of(2.3, 3.5, 4.7, 5.6, 7.8);
        // DoubleSummaryStatistics stats = doubleStream.summaryStatistics();
        // 或
        DoubleSummaryStatistics stats = new DoubleSummaryStatistics();
        stats.accept(1.1);
        stats.accept(2.2);
        stats.accept(3.3);
        
        System.out.println("Count: " + stats.getCount());
        System.out.println("Sum: " + stats.getSum());
        System.out.println("Min: " + stats.getMin());
        System.out.println("Average: " + stats.getAverage());
        System.out.println("Max: " + stats.getMax());
    }
}

4. 详细使用案例

a. 收集基本统计数据

手动添加数据并收集统计结果。

import java.util.DoubleSummaryStatistics;

public class BasicStatistics {
    public static void main(String[] args) {
        DoubleSummaryStatistics stats = new DoubleSummaryStatistics();
        
        double[] values = {1.1, 2.2, 3.3, 4.4, 5.5};
        for (double value : values) {
            stats.accept(value);
        }
        
        System.out.println("Count: " + stats.getCount());
        System.out.println("Sum: " + stats.getSum());
        System.out.println("Min: " + stats.getMin());
        System.out.println("Average: " + stats.getAverage());
        System.out.println("Max: " + stats.getMax());
    }
}
b. 结合 Stream 使用

使用 Stream API 直接收集统计数据。

import java.util.Arrays;
import java.util.DoubleSummaryStatistics;
import java.util.List;

public class StreamStatistics {
    public static void main(String[] args) {
        List<Double> values = Arrays.asList(1.1, 2.2, 3.3, 4.4, 5.5);
        
        DoubleSummaryStatistics stats = values.stream()
                                              .mapToDouble(Double::doubleValue)
                                              .summaryStatistics();
        
        System.out.println("Count: " + stats.getCount());
        System.out.println("Sum: " + stats.getSum());
        System.out.println("Min: " + stats.getMin());
        System.out.println("Average: " + stats.getAverage());
        System.out.println("Max: " + stats.getMax());
    }
}
c. 并行流中的应用

利用并行流提高性能。

import java.util.Arrays;
import java.util.DoubleSummaryStatistics;
import java.util.List;

public class ParallelStreamStatistics {
    public static void main(String[] args) {
        List<Double> values = Arrays.asList(1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9, 10.0);
        
        DoubleSummaryStatistics stats = values.parallelStream()
                                              .mapToDouble(Double::doubleValue)
                                              .summaryStatistics();
        
        System.out.println("Count: " + stats.getCount());
        System.out.println("Sum: " + stats.getSum());
        System.out.println("Min: " + stats.getMin());
        System.out.println("Average: " + stats.getAverage());
        System.out.println("Max: " + stats.getMax());
    }
}

5. 总结

DoubleSummaryStatistics 是一个强大的工具,用于收集 double 类型数据的统计信息。它简化了统计计算过程,与 Stream API 集成良好,适用于各种数据分析和流处理场景。虽然它主要适用于 double 类型数据,但对于大多数统计需求来说,这已经足够强大且易用。通过合理使用 DoubleSummaryStatistics,开发者可以显著提升代码的简洁性和性能。

6. 相关类

DoubleSummaryStatistics 类是 Java 8 引入的 java.util 包中的一个类,用于收集有关 double 数据的统计信息。它提供了一种方便的方式来计算数据流的计数、总和、最小值、最大值和平均值。与 DoubleSummaryStatistics 类似的类有:

a. IntSummaryStatistics

包名: java.util

功能: 收集 int 数据的统计信息,包括计数、总和、最小值、最大值和平均值。

IntSummaryStatistics intStats = new IntSummaryStatistics();
intStats.accept(1);
intStats.accept(2);
intStats.accept(3);
System.out.println(intStats.getAverage());
System.out.println(intStats.getSum());
b. LongSummaryStatistics

功能: 收集 long 数据的统计信息,包括计数、总和、最小值、最大值和平均值。

LongSummaryStatistics longStats = new LongSummaryStatistics();
longStats.accept(1L);
longStats.accept(2L);
longStats.accept(3L);
System.out.println(longStats.getAverage());
System.out.println(longStats.getSum());

7. 用法示例

这些类都实现了 Consumer 接口,因此可以与 Java 8 的流(Stream)API 一起使用。例如,使用 Stream 对象的 collect 方法,可以方便地将元素收集到这些统计类中。

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);

IntSummaryStatistics stats = numbers.stream()
                                    .mapToInt(Integer::intValue)
                                    .summaryStatistics();

System.out.println("Average: " + stats.getAverage());
System.out.println("Sum: " + stats.getSum());
System.out.println("Min: " + stats.getMin());
System.out.println("Max: " + stats.getMax());
System.out.println("Count: " + stats.getCount());

8. 类似工具类的特点

这些统计类具有以下共同特点:

  • 统计数据: 提供计数、总和、最小值、最大值和平均值的统计信息。
  • 接口实现: 实现 Consumer 接口,可以方便地与流 API 一起使用。
  • 常用方法:
    • accept(value): 接受一个值并将其包含在统计中。
    • getCount(): 返回计数。
    • getSum(): 返回总和。
    • getMin(): 返回最小值。
    • getMax(): 返回最大值。
    • getAverage(): 返回平均值。

这些类在处理基本类型的集合数据时非常有用,简化了统计计算的代码。

  • 29
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Android应用开发中,通知(Notification)是一种非常重要的组件,它能够在应用程序外部向用户发送消息。通知可以显示在状态栏、锁屏界面或者弹出一个悬浮窗口等等。通知可以用于提醒用户新消息、任务完成、更新等等。创建和使用通知的相关Android及其方法如下: 1. NotificationManager:负责管理通知的,可以通过该发送、更新、取消通知。 2. NotificationCompat:提供了兼容所有Android版本的通知构建方法和样式。 3. Notification.Builder:用于构建通知的,可以设置通知的图标、标题、内容、声音、震动、LED灯等属性。 4. PendingIntent:用于在通知被点击时启动一个Activity或者Service等。 5. NotificationChannel:用于设置通知渠道,可以设置通知优先级、声音、震动、LED灯等属性。 常用方法: 1. NotificationManager.notify(int id, Notification notification):发送通知。 2. NotificationManager.cancel(int id):取消指定id的通知。 3. NotificationCompat.Builder.setSmallIcon(int icon):设置通知的小图标。 4. NotificationCompat.Builder.setContentTitle(CharSequence title):设置通知的标题。 5. NotificationCompat.Builder.setContentText(CharSequence text):设置通知的内容。 6. NotificationCompat.Builder.setPriority(int priority):设置通知的优先级。 7. NotificationCompat.Builder.setSound(Uri sound):设置通知的声音。 8. NotificationCompat.Builder.setVibrate(long[] pattern):设置通知的震动。 9. NotificationCompat.Builder.setLights(int argb, int onMs, int offMs):设置通知的LED灯。 10. NotificationCompat.Builder.setContentIntent(PendingIntent intent):设置通知被点击时的意图。 11. NotificationChannel.enableVibration(boolean vibration):设置通知渠道是否震动。 12. NotificationChannel.enableLights(boolean lights):设置通知渠道是否LED灯。 13. NotificationChannel.setSound(Uri sound, AudioAttributes attributes):设置通知渠道的声音。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值