现在有这么一组数据

code                   name                year

45615654           x1                     2018-2019

78912648           x2                     2018-2019

42364322           x3                     2017-2018

87635225           x4                     2016-2017

我想在Java后台将数据按year分组该怎么做呢

首先数据一定是根据year排序好的

最后返到前台的数据格式是这样的

原理就是year每换一次map就往里put一组year和list

chargeList: [
          {
            year: 2018-2019,
            list: [
              {
                code: 45615654,
                name: "x1"
              },
              {
                code: 78912648,
                name: "x2"
              },
            ]
          }
        ]

第一种实现:

想要获得这样的数据需要最外层循环根据不重复year的个数来循环

内层再根据year来判断将什么数据放到list中

最后将year和list装在dataMap里

List<ClientResult> clientMsts = clientMstMapper.selectHeatingData2();
List<Map> dataList = new ArrayList<>();
        String year = "";
        List<String> yearList = new ArrayList<>();
        for (ClientResult c : clientMsts) {
            if (!year.equals(c.getYear())) {
                year = c.getYear();
                yearList.add(year);
            }
        }
        for (int i = 0; i < yearList.size(); i++) {
            Map<String, Object> map = new HashMap<>();//装的是code和name
            Map<String, Object> dataMap = new HashMap<>();//装year和list
            List<Map> list = new ArrayList<>();
            year = yearList.get(i);
            for (ClientResult c : clientMsts) {
                if (year.equals(c.getYear())) {
                    map.put("code", c.getCode());
                    map.put("name", c.getName());
                    list.add(map);
                }
            }
            dataMap.put("year", year);
            dataMap.put("list", list);
            dataList.add(dataMap);
        }
        Map<String, Object> map = new HashMap<>();
        map.put("dataList", dataList);

第二种实现:

当year不相同的时候往dataMap中put一组数据

List<ClientResult> clientMsts = clientMstMapper.selectHeatingData2();
        List<Map> dataList = new ArrayList<>();
        String year = "";
        List<Map> lists = null;
        for (ClientResult c : clientMsts) {
            Map<String, Object> dataMap= new HashMap<>();
            boolean a = false;
            if (!year.equals(c.getClientPaymentYear())) {
                year = c.getClientPaymentYear();
                dataMap.put("year", year);
                lists = new ArrayList<>();
                a = true;
            }
            Map map = new HashMap();
            map.put("code", c.getClientMstCode());
            map.put("name", c.getHousingEstateName());
            lists.add(map2);
            if (a) {
                dataMap.put("data", lists);
                dataList.add(map);
            }
        }
        Map<String, Object> map = new HashMap<>();
        map.put("dataList", dataList);

这就是Java后台根据年度分组的详细过程,可能还有别的更好地办法,欢迎一起讨论

Java根据年度将数据分组的更多相关文章

  1. ElasticSearch6.0 Java API 使用 排序,分组 ,创建索引,添加索引数据,打分等(一)

    ElasticSearch6.0  Java API  使用     排序,分组 ,创建索引,添加索引数据,打分等 如果此文章对你有帮助,请关注一下哦 1.1 搭建maven 工程  创建web工程 ...

  2. java按某个字段对数据分组

    import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; i ...

  3. .NET LINQ 数据分组

    数据分组      分组指将数据放入组中以便每个组中的元素共享公共特性的操作.   方法 方法名 说明 C# 查询表达式语法 Visual Basic 查询表达式语法 更多信息 GroupBy 对共享 ...

  4. Java在处理大数据的时候一些小技巧

    Java在处理大数据的时候一些小技巧 发布时间:2013-05-09 00:00:00 来源:中国IT实验室 作者:佚名   关键字:Java 众所周知,java在处理数据量比较大的时候,加载到内存必 ...

  5. MySQL:基础—数据分组

    MySQL:基础-数据分组 1.为什么要分组: 比如一个表中有多条订单记录,如上图,每条记录对应着一个商品,现在我要查询 每个商品被订购的单数 准备出货?也就是找到每个商品被订购的数量. 如果只找一个 ...

  6. Android java传递string类型数据给C

    本文接着实现<Android java传递int类型数据给C>的还未实现的方法: public native String sayHelloInC(String s); 先贴一个工具方法, ...

  7. Android java传递int类型数据给C

    本文根据<Android jni简便开发流程>中的开发流程来实现一个java传递int类型数据给C 新建项目,进行简单的布局 <LinearLayout xmlns:android= ...

  8. Java学习-022-Properties 文件数据写入

    Properties 配置文件写入主要通过 Properties.setProperty 和 Properties.store 两个方法,此文以一个简单的 properties 文件写入源码做示例. ...

  9. EMVTag系列1《数据分组》

    数据分组的设计在个人化过程中承担着重要的作用.数据分组标识符(DGI)是两字节十六进制数.数据分组标识的第一个字节等于'01'到'1E',表明数据存储的SFI.第二个字节表明SFI记录的记录编号.其他 ...

随机推荐

  1. 魂酥的NOIP2018(真实)游记

    NOIP之后才开博客 作为一个高一零基础蒟蒻 想说什么似乎也没什么可说的 才学几个月似乎也没什么发言权就是了 Day -1 期中考爆0,似乎是班里学OI的考得最惨的一个 岂不美哉 要么我也没想考好 也 ...

  2. 【eclipse】外部 jar 包导入教程

    JavaWeb 项目中,可以直接将要导入的 jar 程序包复制到你项目下的 WEB-INF/lib 文件夹下,将来程序移动到别的机子上测试时也能正常运行.如果是普通 Java 工程的话,我们可以在项目 ...

  3. CentOS \Linux文件权限详解

    文件和目录权限概述 在linux中的每一个文件或目录都包含有访问权限,这些访问权限决定了谁能访问和如何访问这些文件和目录. 通过设定权限可以从以下三种访问方式限制访问权限:只允许用户自己访问:允许一个 ...

  4. LINUX-YUM 软件包升级器 - (Fedora, RedHat及类似系统)

    yum install package_name 下载并安装一个rpm包 yum localinstall package_name.rpm 将安装一个rpm包,使用你自己的软件仓库为你解决所有依赖关 ...

  5. 【瞎扯】 About Me

    手动博客搬家: 本文发表于20181218 13:54:31, 原地址https://blog.csdn.net/suncongbo/article/details/85063885 来了?坐,欢迎来 ...

  6. HDU——1133 Buy the Ticket

    Buy the Ticket Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) T ...

  7. 洛谷 P2853 [USACO06DEC]牛的野餐Cow Picnic

    P2853 [USACO06DEC]牛的野餐Cow Picnic 题目描述 The cows are having a picnic! Each of Farmer John's K (1 ≤ K ≤ ...

  8. Linux下使用tcpdump进行抓包(转)

    技巧: 1.可以通过tcpdump抓取某个网卡的包,然后输出日志文件,通过Wireshark进行分析. 2.可以设置Wifi热点,然后通过手机连接这个热点,然后进行tcpdump的分析.而且在Ubun ...

  9. Ubuntu 16.04安装XMind 8

    下载: http://www.xmind.net/download/linux/ 解压 sudo unzip xmind-8-update2-linux.zip -d xmind8 移动到/opt目录 ...

  10. mysql limit具体用法

    MYSQL中LIMIT用法_百度知道 答 limit是mysql的语法select * from table limit m,n其中m是指记录开始的index,从0开始,表示第一条记录n是指从第m+1 ...