一个list 里面存放实体类,根据多个字段进行分组,最后将结果都保存,返回一个map 集合,一层一层的map 集合

news2024/9/24 15:28:49

目录

  • 1 需求
  • 2 实现

1 需求

现在从数据库查询出一个list 集合的数据,是一个实体类,现在需要根据多个字段进行分组,最后只是返回一个map 集合。

一层一层的

在这里插入图片描述

2 实现

如果你想在最后一层的列表数据上进行计算,并将计算结果保存并返回一个Map集合,可以按照以下方式修改代码:

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class GroupingExample {
    public static void main(String[] args) {
        List<ZpTimeIntervalJudge> dataList = getDataList(); // 获取数据列表
        
        // 按照等级、时效和模式分组,并计算值
        Map<String, Map<Integer, Map<String, Double>>> groupedData = dataList.stream()
                .collect(Collectors.groupingBy(ZpTimeIntervalJudge::getLevel,
                        Collectors.groupingBy(ZpTimeIntervalJudge::getTime,
                                Collectors.groupingBy(ZpTimeIntervalJudge::getMode,
                                        Collectors.collectingAndThen(Collectors.toList(), GroupingExample::calculateValue)))));
        
        // 打印分组结果
        groupedData.forEach((level, levelGroup) -> {
            System.out.println("等级:" + level);
            levelGroup.forEach((time, timeGroup) -> {
                System.out.println("时效:" + time);
                timeGroup.forEach((mode, value) -> {
                    System.out.println("模式:" + mode + ",计算值:" + value);
                });
            });
            System.out.println();
        });
    }
    
    // 根据最后一层的列表数据计算值的方法
    private static Double calculateValue(List<ZpTimeIntervalJudge> list) {
        // 根据实际需求进行计算,并返回结果
        // 示例:计算列表中所有数据的平均值
        double sum = 0.0;
        for (ZpTimeIntervalJudge data : list) {
            sum += data.getValue();
        }
        return sum / list.size();
    }
    
    // 获取数据列表的示例方法,请根据实际情况进行实现
    private static List<ZpTimeIntervalJudge> getDataList() {
        // ...
    }
}

class ZpTimeIntervalJudge {
    private String level;
    private int time;
    private String mode;
    private double value;
    
    // 构造方法和getter/setter,请根据实际情况进行实现
    // ...
}

在修改后的代码中,我们使用Collectors.collectingAndThen方法来在最后一层分组的数据上进行计算。calculateValue方法接收一个最后一层的列表数据,并根据实际需求进行计算,并返回计算结果。这样,最终的分组结果将包含计算结果的Map集合。

如果在最后一层,需要传另外的参数

如果calculateValue方法需要接收一个最后一层的列表数据和一个额外的字符串变量,你可以将该变量添加到方法的参数列表中,并在Collectors.collectingAndThen方法中传递该变量。修改后的代码如下所示:

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class GroupingExample {
    public static void main(String[] args) {
        List<ZpTimeIntervalJudge> dataList = getDataList(); // 获取数据列表
        
        // 按照等级、时效和模式分组,并计算值
        Map<String, Map<Integer, Map<String, Double>>> groupedData = dataList.stream()
                .collect(Collectors.groupingBy(ZpTimeIntervalJudge::getLevel,
                        Collectors.groupingBy(ZpTimeIntervalJudge::getTime,
                                Collectors.groupingBy(ZpTimeIntervalJudge::getMode,
                                        Collectors.collectingAndThen(Collectors.toList(),
                                                list -> calculateValue(list, "extraParameter"))))));
        
        // 打印分组结果
        groupedData.forEach((level, levelGroup) -> {
            System.out.println("等级:" + level);
            levelGroup.forEach((time, timeGroup) -> {
                System.out.println("时效:" + time);
                timeGroup.forEach((mode, value) -> {
                    System.out.println("模式:" + mode + ",计算值:" + value);
                });
            });
            System.out.println();
        });
    }
    
    // 根据最后一层的列表数据和额外参数计算值的方法
    private static Double calculateValue(List<ZpTimeIntervalJudge> list, String extraParameter) {
        // 根据实际需求进行计算,并返回结果
        // 示例:计算列表中所有数据的平均值,并使用额外参数进行计算
        double sum = 0.0;
        for (ZpTimeIntervalJudge data : list) {
            sum += data.getValue();
        }
        return sum / list.size() + extraParameter.length(); // 示例中使用了额外参数的长度
    }
    
    // 获取数据列表的示例方法,请根据实际情况进行实现
    private static List<ZpTimeIntervalJudge> getDataList() {
        // ...
    }
}

class ZpTimeIntervalJudge {
    private String level;
    private int time;
    private String mode;
    private double value;
    
    // 构造方法和getter/setter,请根据实际情况进行实现
    // ...
}

在修改后的代码中,calculateValue方法的参数列表中添加了一个String类型的额外参数extraParameter。在Collectors.collectingAndThen

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1353115.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

day 57 算法训练|动态规划part17

参考&#xff1a;代码随想录 647. 回文子串 1. dp数组&#xff08;dp table&#xff09;以及下标的含义 是不是能找到一种递归关系&#xff0c;也就是判断一个子字符串&#xff08;字符串的下表范围[i,j]&#xff09;是否回文&#xff0c;依赖于&#xff0c;子字符串&#x…

速欣商务咨询:江西信用卡逾期问题解决专家,为您排忧解难

信用卡逾期问题常常令人困扰&#xff0c;对个人信用造成负面影响。江西速欣商务咨询以其专业服务团队&#xff0c;成为解决江西地区信用卡逾期问题的专家&#xff0c;为您提供全方位的解决方案&#xff0c;排忧解难。 深度诊断&#xff0c;制定个性化解决方案 速欣商务咨询通过…

ASP.NET Core基础之图片文件(一)-WebApi图片文件上传到文件夹

阅读本文你的收获&#xff1a; 了解WebApi项目保存上传图片的三种方式学习在WebApi项目中如何上传图片到指定文件夹中 在ASP.NET Core基础之图片文件(一)-WebApi访问静态图片文章中&#xff0c;学习了如何获取WebApi中的静态图片&#xff0c;本文继续分享如何上传图片。 那么…

基于花授粉算法优化的Elman神经网络数据预测 - 附代码

基于花授粉算法优化的Elman神经网络数据预测 - 附代码 文章目录 基于花授粉算法优化的Elman神经网络数据预测 - 附代码1.Elman 神经网络结构2.Elman 神经用络学习过程3.电力负荷预测概述3.1 模型建立 4.基于花授粉优化的Elman网络5.测试结果6.参考文献7.Matlab代码 摘要&#x…

李沐机器学习系列3---深度学习计算

1 层和块 1.1 定义块 用class表示层&#xff0c;并只需要实现构造函数和前向传播函数 class MLP(nn.Module):# 用模型参数声明层。这里&#xff0c;我们声明两个全连接的层def __init__(self):# 调用MLP的父类Module的构造函数来执行必要的初始化。# 这样&#xff0c;在类实…

C++面向对象语法总结(三)

目录 《C面向对象语法总结(一&#xff09;》《C面向对象语法总结(二&#xff09;》 二十一、多继承 C允许一个类可以有多个父类&#xff08;不建议使用&#xff0c;会增加程序设计复杂度&#xff09;在多继承中&#xff0c;会按照继承顺序将父类的成员变量放到子类成员变量的…

qt .pro工程转vs工程

1. 新建vs空项目或者Qt Console Application&#xff1b; 2. 扩展 -》Qt VS Tools -》Open Qt Project (.pro) 打开对应的pro文件即可将.pro工程转成vs工程&#xff1b; 注意&#xff1a; &#xff08;1&#xff09;转成的vs工程在pro文件同级目录下&#xff0c;双击打开vcx…

完善 Golang Gin 框架的静态中间件:Gin-Static

Gin 是 Golang 生态中目前最受用户欢迎和关注的 Web 框架&#xff0c;但是生态中的 Static 中间件使用起来却一直很不顺手。 所以&#xff0c;我顺手改了它&#xff0c;然后把这个改良版开源了。 写在前面 Gin-static 的改良版&#xff0c;我开源在了 soulteary/gin-static&a…

第二十五章 JDBC 和数据库连接池

一、JDBC 概述&#xff08;P821&#xff09; 1. 基本介绍 &#xff08;1&#xff09;JDBC 为访问不同的数据库提供了统一的接口&#xff0c;为使用者屏蔽了细节问题。 &#xff08;2&#xff09;Java 程序员使用 JDBC&#xff0c;可以连接任何提供了 JDBC 驱动程序的数据库系统…

【网络技术】【Kali Linux】Wireshark嗅探(六)地址解析协议(ARP)

一、实验目的 本次实验使用Wireshark流量分析工具进行网络嗅探&#xff0c;旨在了解地址解析协议&#xff08;ARP&#xff09;的工作原理。 二、ARP协议概述 地址解析协议&#xff08;Address Resolution Protocol, ARP&#xff09;位于网络层&#xff08;IP层&#xff09;&…

金和OA SAP_B1Config.aspx存在未授权访问漏洞

产品简介 金和网络是专业信息化服务商&#xff0c;为城市监管部门提供了互联网监管解决方案&#xff0c;为企事业单位提供组织协同OA系统升开发平台&#xff0c;电子政务一体化平台智慧电商平合等服务 漏洞概述 金和OA SAP_B1Config.aspx存在未授权访问漏洞&#xff0c;攻击…

看完,你还会学鸿蒙吗?

是不是前端程序员的春天&#xff0c;我们可以分析鸿蒙现在的市场和布局。其实不仅仅只是前端&#xff0c;还有Android、Java、Python等等开发人员都可以把鸿蒙当做新的出路。 2024年程序员为什么一定要学鸿蒙&#xff1f; 首先&#xff0c;鸿蒙作为一个新系统的出现。它的结构…

Android studio BottomNavigationView 应用设计

一、新建Bottom Navigation Activity项目&#xff1a; 二、修改bottom_nav_menu.xml: <itemandroid:id"id/navigation_beijing"android:icon"drawable/ic_beijing_24dp"android:title"string/title_beijing" /><itemandroid:id"i…

test ui-04-testcomplete 入门介绍

About TestComplete TestComplete是一款适用于各种应用程序类型和技术的自动化测试环境&#xff0c;包括&#xff08;但不限于&#xff09;Windows、.NET、WPF、Visual C、Visual Basic、Delphi、CBuilder、Java以及Web应用程序和服务。 TestComplete既适用于功能测试&#x…

线程的深入学习(一)

前言 前面文章讲述了线程的部分基本知识&#xff0c;这篇是对线程的深入学习&#xff0c;包含线程池&#xff0c;实现框架等。 1.学习如何使用Executor框架创建线程池。 2.并发工具类如CountDownLatch、CyclicBarrier等。 3.线程安全和并发集合&#xff1a; 4.学习如何使用Jav…

python入门第一讲:认识python

目录 什么是计算机 什么是编程 编程语言有哪些 python是咋来的 python能干啥 python的优缺点 什么是计算机 什么叫计算机&#xff0c;当你把问这个问题问家里的老人的时候&#xff0c;他们很可能指着计算器告诉你说&#xff0c;这个就是计算机&#xff0c;这个很明显&am…

CEEMDAN +组合预测模型(Transformer - BiLSTM+ ARIMA)

目录 往期精彩内容&#xff1a; 前言 1 风速数据CEEMDAN分解与可视化 1.1 导入数据 1.2 CEEMDAN分解 2 数据集制作与预处理 3 基于CEEMADN的 Transformer - BiLSTM 模型预测 3.1 定义CEEMDAN-Transformer - BiLSTM预测模型 3.2 设置参数&#xff0c;训练模型 4 基于A…

HubSpot电子邮件自动化的关键功能和流程!

HubSpot提供了强大的电子邮件自动化工具&#xff0c;使用户能够创建、执行和跟踪复杂的电子邮件市场营销活动。以下是HubSpot电子邮件自动化的一些关键功能和流程&#xff1a; 1.电子邮件工作流程&#xff08;Email Workflows&#xff09;&#xff1a; 用户可以使用HubSpot的工…

Lumerical Script------for语句

Lumerical------for语句 正文正文 关于 Lumerical 中 for 语句的用法这里不做过多说明了,仅仅做一个记录,具体用法如下: 通常我们用的比较多的形式是第一种步长值为 1 的情况。对于其他步长值的情况,我们可以使用第二种用法。对于 while 的类似使用方法可以使用第三种。 …

2_并发编程同步锁(synchronized)

并发编程带来的安全性同步锁(synchronized) 1.他的背景 当多个线程同时访问&#xff0c;公共共享资源的时候&#xff0c;这时候就会出现线程安全&#xff0c;代码如&#xff1a; public class AtomicDemo {int i0;//排他锁、互斥锁public void incr(){ //synchronizedi; …