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日

相关文章

  • Json转list二层解析转换代码实例

    下面是完整的攻略: 理解Json数据格式 在进行Json转list二层解析转换操作之前,我们需要先对Json数据格式有一定的了解。Json(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于前后端数据传输和存储。它的基本结构是一个键值对,用花括号包裹,例如: { "name": "张三&qu…

    Java 2023年5月26日
    00
  • SpringBoot JWT实现token登录刷新功能

    下面就为你详细讲解“SpringBoot JWT实现token登录刷新功能”的完整攻略。 什么是JWT JWT即Json Web Token,是基于JSON格式的令牌,包含有用户的一些身份信息和一些验证信息。在用户登录后,服务器会生成一个JWT给前端返回,在之后的请求中,前端只需在HTTP头中携带该令牌即可实现状态保持。 实现流程 首先,我们需要在项目中引入…

    Java 2023年5月20日
    00
  • 小程序中读取腾讯文档的表格数据的实现

    小程序中读取腾讯文档的表格数据的实现可以分为以下几个步骤: 1. 创建小程序并获取腾讯文档API权限 首先需要使用微信开发者工具创建一个小程序并获取腾讯文档API权限。可以通过微信开发者工具的云开发功能来进行配置。 2. 获取腾讯文档的accessToken 在小程序中使用腾讯文档API需要先获取该文档的accessToken。可以按照以下步骤获取: 在腾讯…

    Java 2023年5月23日
    00
  • Java实战项目 图书管理系统

    Java实战项目 图书管理系统攻略 介绍 Java实战项目 图书管理系统是一个基于Java语言的应用程序,用于管理图书馆内的书籍信息。这个项目涉及到了Java SE中的很多技术,例如Swing界面设计,JDBC数据库操作等。在这个项目中,我们将会实现以下功能: 图书的增加、查询、修改和删除 借阅的登记、查询、延期和归还 管理员和读者的登录操作 实现步骤 1.…

    Java 2023年5月23日
    00
  • Java制作验证码的完整实例代码

    首先需要了解什么是验证码,验证码是一种防止机器自动化操作的机制,通常用于表单提交、用户登录等场景中。Java可以通过生成随机数、加密算法等方式来制作验证码。 制作验证码的完整实例代码和步骤如下。 步骤一:引入依赖 我们使用Java的Spring框架,所以需要引入相应的依赖库,包括Spring MVC和Apache Commons Codec等。 <de…

    Java 2023年5月30日
    00
  • java时间戳转日期格式的实现代码

    下面是Java时间戳转日期格式的实现代码的完整攻略。 问题背景 时间戳是指从某个固定时间(如 1970年1月1日00:00:00 UTC)起经过的毫秒数,通常用于记录某个时间点的信息。在Java开发中,我们经常需要将时间戳转换为可读的日期格式,以便于显示、存储等操作。 实现步骤 Java提供了多种方式将时间戳转化为日期格式,最常用的方式是使用SimpleDa…

    Java 2023年5月20日
    00
  • IDEA创建Java项目文件并运行教程解析

    IDEA创建Java项目文件并运行教程解析 1. 创建Java项目 打开IntelliJ IDEA,点击“Create New Project”。 在弹出的窗口中,选择“Java”并选择项目存放的路径。 选择JDK版本,点击“Next”。 在“Project Name”中填入项目名称,默认为“untitled”,点击“Next”。 配置项目的库文件,可不配置…

    Java 2023年5月26日
    00
  • java实现即时通信的完整步骤分享

    下面我将为大家详细讲解Java实现即时通信的步骤及示例: 步骤一:选择通信协议 实现即时通信的第一步是选择合适的通信协议,常用的通信协议有TCP、UDP和HTTP等。其中TCP协议是面向连接的、可靠的协议,适用于保证数据可靠传输的场景;UDP协议是无连接的、不可靠的协议,适用于实时性要求较高的场景;HTTP协议是应用最为广泛的协议,适用于数据传输量较大、要求…

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