• 有趣的统计数据表格显示


    前言:

    表格里需要对数据进行汇总展示,而用sql又不是很方便(以我的sql水平无法实现),

    通过用list集合转换成map,再到map里进行数据的替换,将所需要的统计字段set进list的bean的属性中进行封装

    代码实现:

    public Map getJksForMap(String dwbm, String jksbh, Date begin, Date end) {
    //        if (!org.apache.commons.Resources.code()) {
    //            return new HashMap();
    //        }
            List list = accountQueryDao.getJks(dwbm, jksbh, begin, end);
            Map listMap = new HashMap();
            Map totalMap = new HashMap();
            Map statMap = new HashMap();
            for (int i = 0; i < list.size(); i++) {
                QueryJks o = (QueryJks) list.get(i);
                if (listMap.get(o.getDwbm()) == null) {
                    List lt = new ArrayList();
                    lt.add(o);
                    listMap.put(o.getDwbm(), lt);
                    totalMap.put(o.getDwbm(), o.getSjje());
                } else {
                    List lt = (List) listMap.get(o.getDwbm());
                    lt.add(o);
                    BigDecimal sum = (BigDecimal) totalMap.get(o.getDwbm());
                    totalMap.put(o.getDwbm(), sum.add(o.getSjje()));
                }
            }
            if (StringUtils.isNotBlank(dwbm)) {
                statMap = getStatJksForYear(dwbm, Integer.valueOf(DateUtil
                        .formatDate(begin, "yyyy")));
            }
            Iterator it = listMap.keySet().iterator();
            while (it.hasNext()) {
                String dw = (String) it.next();
                List lt = (List) listMap.get(dw);
                QueryJks o = new QueryJks();
                o.setXmbm("以上合计");
                o.setXmmc("记录数:" + lt.size());
                o.setSjje((BigDecimal) totalMap.get(dw));
                lt.add(o);
                if (statMap.get(dw) != null) {
                    lt.addAll((List) statMap.get(dw));
                }
            }
            return listMap;
        }
    
        public Map getStatJksForYear(String dwbm, Integer year) {
            Map statMap = accountQueryDao.getStatJksForYear(dwbm, year);
            BigDecimal stat = new BigDecimal("0");
            QueryJks o = new QueryJks();
            Iterator it = statMap.keySet().iterator();
            while (it.hasNext()) {
                String dw = (String) it.next();
                List lt = (List) statMap.get(dw);
                stat = new BigDecimal("0");
                Iterator listLt = lt.iterator();
                while (listLt.hasNext()) {
                    o = (QueryJks) listLt.next();
                    stat = stat.add(o.getSjje());
                    o.setKprq("本月累计");
                    o.setJkr(FormatUtil.formatCurrency(stat.doubleValue()));
                }
                QueryJks bnlj = new QueryJks();
                bnlj.setDwbm(dw);
                bnlj.setXmbm("本年累计");
                bnlj.setSjje(stat);
                lt.add(bnlj);
            }
            return statMap;
    
        }
    View Code

    说明:

    这里的map实则分为三个map,一个是原始数据,一个是累加的统计金额,一个是通过月份查询出来的统计金额

    其中的文字说明等字段设为bean中的某个属性

    注意:

    Iterator it = listMap.keySet().iterator();
            while (it.hasNext()) {
                String dw = (String) it.next();
                List lt = (List) listMap.get(dw);
                QueryJks o = new QueryJks();
                o.setXmbm("以上合计");
                o.setXmmc("记录数:" + lt.size());
                o.setSjje((BigDecimal) totalMap.get(dw));
                lt.add(o);
                if (statMap.get(dw) != null) {
                    lt.addAll((List) statMap.get(dw));
                }
            }

    这里运用迭代器往map里添加list集合

    页面效果:


     tips:

    虽然项目版本比较老(都还没有泛型),但是这种巧妙的封装思想依旧是值得学习的

  • 相关阅读:
    Spring配置文件命名空间
    JSTL之数字、日期格式化<fmt:formatNumber/>、<fmt:formatDate/>
    获取真实ip
    DES
    MD5
    手动导入maven包
    windows下redis主从复制设置
    linux系统上传图片读取权限设置
    linux系统项目查看进程
    linux上服务起的很慢解决方式
  • 原文地址:https://www.cnblogs.com/wutongshu-master/p/12060207.html
Copyright © 2020-2023  润新知