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日

相关文章

  • Java中的接口和抽象类用法实例详解

    对于Java中的接口和抽象类用法实例详解,我们可以按照以下步骤来进行详细讲解。 1. 接口和抽象类的定义 首先,我们需要明确接口和抽象类的定义。 接口是一组完全抽象的方法的集合,它是一种规范,规定了实现它的类需要实现的方法和行为。接口本身不能被实例化,只能被实现它的类实例化。 抽象类是一种对于实例化来说不完整的类,它存在的目的就是让其他类去继承它并实现它的抽…

    Java 2023年5月26日
    00
  • Java中的notyfy()和notifyAll()的本质区别

    在Java多线程编程中,我们经常会用到wait()、notify()和notifyAll()方法,它们都属于Object类中用于锁的方法。其中notify()和notifyAll()方法都是用来唤醒等待线程的方法,但它们在本质上是有一定区别的。 一、notify()和notifyAll()方法的作用 notify()和notifyAll()都用于唤醒当前对象…

    Java 2023年5月26日
    00
  • Velocity Parse()函数引发的本地包含漏洞及利用方法

    Velocity Parse()函数是Apache Velocity模板引擎中非常常用的函数之一,它的作用是将一个字符串解析成一个Velocity模板,在模板中可以使用 $var形式的语法来代替具体变量或表达式。 然而,如果在解析字符串时未对用户输入进行过滤和验证,就会产生本地文件包含(LFI)攻击的漏洞。攻击者可以利用此漏洞读取服务器中的任意文件,甚至可以…

    Java 2023年5月20日
    00
  • SpringMVC上传和解析Excel方法

    下面是SpringMVC上传和解析Excel的攻略: 目录 前置条件 步骤一:添加依赖 步骤二:编写上传页面 步骤三:编写Controller接收上传文件 步骤四:编写Excel解析方法 示例一:上传并解析Excel文件 示例二:将Excel数据存储到数据库中 前置条件 在开始编写代码前,确保已经满足以下条件:- SpringMVC项目已经搭建完成。- 已经…

    Java 2023年6月15日
    00
  • Java中的Spring框架是什么?

    Spring框架是Java领域一种非常流行的开源框架,它提供了一种全面的解决方案,用于构建企业级Java应用程序,以保证高效性和易扩展性。 Spring框架有以下主要特点:- 轻量级:Spring框架通过依赖注入和切面编程来实现低耦合和高内聚,从而保证不会增加程序的负担和复杂度。- 容器化:Spring框架提供了一个核心容器,即Spring容器,它利用Jav…

    Java 2023年4月27日
    00
  • Java 分位点(分位值)计算方式

    当需要将一组数据进行分布分析时,可以通过计算分位点(quantile),常用的分位点有中位数、上四分位数、下四分位数等。在Java中,可以使用Apache Commons Math库来计算分位点,本文将介绍Java分位点计算方式的完整攻略。 引入依赖 要使用Apache Commons Math库,需要在pom.xml文件中添加以下依赖: <depen…

    Java 2023年5月26日
    00
  • Java判断字符串是否是整数或者浮点数的方法

    Java判断字符串是否是整数或浮点数有多种方法可以实现。以下是几种常见的方法。 方法一:正则表达式 正则表达式可以匹配复杂的字符模式。下列正则表达式可以匹配整数和浮点数: ^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$ 然后将它和待匹配字符串进行比较: public static boolean isNumeric(Stri…

    Java 2023年5月27日
    00
  • J2EE项目代码编写规范分享

    这里我将详细讲解一下“J2EE项目代码编写规范分享”的完整攻略。 1. 代码命名规范 在代码编写过程中,为了方便维护且易于理解,我们需要遵循一定的代码命名规范。具体来说,包括以下方面: 1.1 类名 类名应使用驼峰命名法,首字母大写。 类名应该简单明了,反应该类的作用。 示例: public class UserService { } 1.2 方法名 方法名…

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