java8 如何实现分组计算数量和计算总数

Java8 提供了很多函数式编程的新特性,其中包括对集合(Collection)的数据处理方式的改进。下面我来介绍一下如何使用 Java8 来实现分组计算数量和计算总数的操作。

分组计算数量

在 Java8 中,我们可以通过 Collectors.groupingBy() 方法来实现对集合进行分组。具体实现方法如下:

Map<String, Long> result = list.stream()
                .collect(Collectors.groupingBy(Item::getCategory, Collectors.counting()));

这段代码中,使用 stream() 方法将集合转换为流,然后使用 groupingBy() 方法将集合按照 Item 对象中的 category 属性进行分组,最后利用 counting() 方法统计每组的数量。

其中,Map<String, Long> 表示分组之后的结果,其中 key 表示被分组的属性,value 表示该属性下的数量。

例如,如果我们有一个 Item 类,其中包含 idcategory 两个属性,现在我们需要将该 List<Item> 按照 category 属性进行分组,最后统计每个分组下的数量,那么我们可以使用如下代码:

public class Item {
    private int id;
    private String category;

    public Item(int id, String category) {
        this.id = id;
        this.category = category;
    }

    public int getId() {
        return id;
    }

    public String getCategory() {
        return category;
    }
}

List<Item> list = new ArrayList<Item>(){{
    add(new Item(1, "fruit"));
    add(new Item(2, "fruit"));
    add(new Item(3, "vegetable"));
    add(new Item(4, "fruit"));
    add(new Item(5, "vegetable"));
}};

Map<String, Long> result = list.stream()
                .collect(Collectors.groupingBy(Item::getCategory, Collectors.counting()));
System.out.println(result);

以上代码的输出结果为:{vegetable=2, fruit=3},表示 List<Item> 中共有 2 个蔬菜,3 个水果。

分组计算总数

在 Java8 中,我们也可以通过 Collectors.groupingBy() 方法来实现对集合进行分组的操作。具体实现方法如下:

Map<String, Double> result = list.stream()
                .collect(Collectors.groupingBy(Item::getCategory, Collectors.summingDouble(Item::getPrice)));

这段代码中,使用 stream() 方法将集合转换为流,然后使用 groupingBy() 方法将集合按照 Item 对象中的 category 属性进行分组,最后利用 summingDouble() 方法计算每组中属性 price 的总和。

其中,Map<String, Double> 表示分组之后的结果,其中 key 表示被分组的属性,value 表示该属性下的数量。

例如,如果我们有一个 Item 类,其中包含 idcategoryprice 三个属性,现在我们需要将该 List<Item> 按照 category 属性进行分组,最后统计每个分组下的 price 属性的总和,那么我们可以使用如下代码:

public class Item {
    private int id;
    private String category;
    private double price;

    public Item(int id, String category, double price) {
        this.id = id;
        this.category = category;
        this.price = price;
    }

    public int getId() {
        return id;
    }

    public String getCategory() {
        return category;
    }

    public double getPrice() {
        return price;
    }
}

List<Item> list = new ArrayList<Item>(){{
    add(new Item(1, "fruit", 2.0));
    add(new Item(2, "fruit", 4.5));
    add(new Item(3, "vegetable", 1.5));
    add(new Item(4, "fruit", 3.0));
    add(new Item(5, "vegetable", 2.5));
}};

Map<String, Double> result = list.stream()
                .collect(Collectors.groupingBy(Item::getCategory, Collectors.summingDouble(Item::getPrice)));
System.out.println(result);

以上代码的输出结果为:{vegetable=4.0, fruit=9.5},表示 List<Item> 中共有 2 个蔬菜,3 个水果,价格分别为 4.0 和 9.5。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java8 如何实现分组计算数量和计算总数 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • springboot连接redis并动态切换database的实现方法

    下面我会详细讲解“springboot连接redis并动态切换database的实现方法”的完整攻略。 1. 引入依赖 首先需要在 pom.xml 文件里引入 Redis 相关的依赖项: <dependency> <groupId>org.springframework.boot</groupId> <artifac…

    Java 2023年5月20日
    00
  • java初学者如何让编程学习起来更简单

    这里提供一些帮助Java初学者更轻松学习编程的攻略: 1. 选择适合自己的学习方法 学习方法的选择对于学习编程语言来说非常重要。有的人更喜欢以视频教程和示例代码为主,而有些人则更喜欢以书本为主。此外,还有一些适用于不同学习风格的在线课程,例如交互式课程和mooc(大规模开放式在线课程)。初学者应该探索各种不同的学习途径,找出自己最适合的一种。 2. 坚持练习…

    Java 2023年5月19日
    00
  • 如何安装jdk及安装MyEclipse的图文教程

    下面是如何安装JDK及MyEclipse的图文教程。 安装JDK JDK(Java Development Kit)是开发和运行Java应用程序所必需的软件开发工具包。在安装MyEclipse之前,需要先安装JDK,以下是安装步骤: 第一步:下载JDK 首先,前往Oracle官方网站下载JDK安装文件,网址是 http://www.oracle.com/te…

    Java 2023年5月26日
    00
  • 详解Java编程中包package的内容与包对象的规范

    Java编程中的包(package)是为了更好地组织类而产生的概念,它可以将同一类别或功能的类文件存放在同一包目录下,使用时只需要import相应包的类即可。在Java编程中,包的定义需要遵循一定的规范。 包的定义规范 定义包名时,使用小写字母(包名不要与类名相同); 将包的名字写在Java源文件的顶部; 多个单词组成包名时,使用”.”分割,例如com.co…

    Java 2023年5月26日
    00
  • Spring集成MyBatis完整实例(分享)

    下面我将详细讲解Spring集成MyBatis的完整攻略,并附上两个示例。 1. 准备工作 在开始之前,需要完成以下准备工作: 安装Java JDK和Maven。 创建一个Spring项目,可以使用Maven构建。 添加Spring、MyBatis相关依赖,如下所示: <dependencies> <!– Spring相关依赖 –&gt…

    Java 2023年5月20日
    00
  • java字符串中常用的十个方法总结

    Java字符串中常用的十个方法总结 Java字符串是非常常用的一种数据类型,本文将总结Java字符串中常用的十个方法,以帮助初学者更好地掌握Java字符串的使用。 1. charAt(int index) 该方法返回指定索引处的字符,索引从0开始计数。 示例: String str = "Hello, World!"; char firs…

    Java 2023年5月26日
    00
  • 5种解决Java独占写文件的方法

    5种解决Java独占写文件的方法 在使用Java进行文件操作时,有时会遇到独占写文件的问题,即在一个程序正在写一个文件时,其他程序无法访问该文件。这种情况下,我们需要采用一些特殊的方法来解决这个问题。下面介绍五种解决Java独占写文件问题的方法。 方法一:使用RandomAccessFile类 RandomAccessFile 可以访问文件的任意位置读写数据…

    Java 2023年5月20日
    00
  • Jdbc连Sybase数据库的几种方法

    JDBC是Java数据库连接的标准接口,在Java程序中可通过JDBC来访问多种类型的数据库。本文将针对Sybase数据库,介绍几种连接Sybase数据库的方法,以及代码示例。 1. 准备工作 在使用JDBC连接Sybase数据库之前,需要先进行准备工作,包括安装Sybase数据库、Sybase驱动程序。 1.1 安装Sybase数据库 Sybase数据库是…

    Java 2023年6月16日
    00
合作推广
合作推广
分享本页
返回顶部