json多层次数据统计结构生成

面对统计需求,本文提出了一种使用JSON构建可过滤树的解决方案,避免频繁创建POJO。通过让统计数据流经预设的筛选节点,动态生成或更新树结构,实现了灵活的统计结果。该方法在SpringBoot环境中实现,依赖于net.sf.json.JSONObject。
摘要由CSDN通过智能技术生成
  • 项目中有统计的需求,一开始想使用pojo来封装统计的数据但是发现每个统计需求是特有的,也就是说写pojo是可以解决问题的,但是只是用一次统计就不用了,而且后期统计需求增加,pojo会大量增加,所以就思考是否有更好的解决方案

思路:前后端交互用的是json数据,json的结构抽象出来就是一棵树或多棵树,所以生成统计数据实际就是生成一棵树,生成一棵树实际就是对节点的操作(CRUD),所以要统计数据就是要自定义一棵可以过滤的树,当一个统计数据(如:性别)流经这棵树时,首先会根据给定的筛选节点进行流动,遇到分支会进行判断,流向特定的分支,如发现判断后没有给定节点,将会生成新的节点,最后将统计结果放在树的分支的最后一个节点上,从而实现了相对自由的统计结构生成方式

环境:springboot

依赖:net.sf.json.JSONObject(用其它也是可以的,思路一样方法不一样而已)

import net.sf.json.JSONObject;
import java.util.*;

/**
 * @author ZC
 * @date 2019/12/23
 */
public class Test {
    public static void main(String[] args) {

        //模拟数据
        List<User> userList = new ArrayList<>();
        userList.add(new User(1, "1997", "IT部"));
        userList.add(new User(0, "1992", "销售部"));
        userList.add(new User(0, "1999", "IT部"));
        userList.add(new User(1, "1995", "IT部"));
        userList.add(new User(0, "1995", "销售部"));
        userList.add(new User(1, "1997", "IT部"));
        userList.add(new User(0, "1995", "运维部"));
        userList.add(new User(1, "1997", "IT部"));
        userList.add(new User(0, "1997", "运维部"));
        userList.add(new User(1, "1995", "IT部"));
        userList.add(new User(0, "1997", "运维部"));
        userList.add(new User(1, "1992", "运维部"));
        userList.add(new User(1, "1992", "IT部"));

        //统计数据的根节点
        JSONObject statistics = new JSONObject();
        //过滤的一些条件和统计数据
        HashMap<String, Object> condittion = new HashMap<>();

        //设置根条件(属于哪个公司)
        condittion.put("com", "哈皮公司");
        //统计
        for (User user : userList) {
            //设置子条件和统计数据
            condittion.put("gender", user.getSex());
            condittion.put("dep", user.getDep());
            condittion.put("year", user.getBirthday());
            //开始统计过滤
            jsonDepInc(statistics, condittion);
        }
        System.out.println(statistics);
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值