优化两组数据对象进行对象差异分析和重组

本文介绍如何利用Java8的Stream API优化处理泛型接口返回的数据,通过匹配ID将两个数组中对应对象的值进行赋值,从而实现对象的差异分析和重组。这种方法避免了将数据转换为JSONObject后再进行操作,提高了代码效率。
摘要由CSDN通过智能技术生成
package com.aisino.behavior.util;

import com.alibaba.fastjson.JSONObject;

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

/**
 * @ClassName ccc
 * @Description TODO
 * @Author zhanggesheng
 * @Date 2020/10/15 16:22
 * @Version 1.0
 */
public class ccc {
    public static void main(String[] args) {
        String aa = " [{ \"userId\": \"8816\", \"userName\": \"hbdc2\", \"realName\": \"湖北测试用户\", \"deptId\": \"9936\", \"userType\": \"\" }, { \"userId\": \"8048\", \"userName\": \"cc\", \"realName\": \"熊\", \"deptId\": \"9936\", \"userType\": \"\" }, { \"userId\": \"1232\", \"userName\": \"xlp2\", \"realName\": \"熊\", \"deptId\": \"9936\", \"userType\": \"\" }]";
        String bb = " [{ \"userId\": \"8816\", \"userName\": \"hbdc2\", \"realName\": \"湖北测试用户\", \"deptId\": \"9936\", \"userType\": \"区域财务负责人\" }, { \"userId\": \"8048\", \"userName\": \"cc\", \"realName\": \"熊\", \"deptId\": \"9936\", \"userType\": \"区域财税人员\" }, { \"userId\": \"1232\", \"userName\": \"xlp2\", \"realName\": \"熊\", \"deptId\": \"9936\", \"userType\": \"区域财税人员\" }]";

        List<Object> recodeList = new ArrayList<>();
        List<Map> resultList = new ArrayList<>();
        recodeList = JSONObject.parseArray(aa,Object.class);
        resultList = JSONObject.parseArray(bb,Map.class);
        getList(recodeList,resultList);
    }

    public static List<?> getList(List<?> recode, List<Map> result) {
//        List<Object> manageList = new ArrayList<>();
//        for (int i = 0; i < recode.size(); i++) {
//            Object obj = recode.get(i);
//            JSONObject jsonObject = (JSONObject) JSONObject.toJSON(obj);
//            String deptId = jsonObject.get("deptId").toString();
//
//            for (int j = 0; j < result.size(); j++) {
//                String deptId2 = (String) result.get(j).get("deptId");
//                if (deptId.equals(deptId2)) {
//                    jsonObject.put("userType", result.get(j).get("userType"));
//                }
//                manageList.add(jsonObject);
//            }
//        } return manageList;
//      *****以下为优化后代码******   

        List<String> resultDeptIdList = result.stream().map(e -> e.get("deptId").toString()).collect(Collectors.toList());
        List newRecord =recode.stream().map(e -> {
            JSONObject newObj = (JSONObject) JSONObject.toJSON(e);
            if (resultDeptIdList.contains(newObj.get("deptId").toString())) {
                newObj.put("userType", result.stream().filter(x -> newObj.get("deptId").toString().equals(x.get("deptId").toString())).findFirst().get().get("userType"));
            }
            ; return newObj;}).collect(Collectors.toList());
            return newRecord;
        }
    }

今日遇到同事问到一个问题,对于泛型的接口,统一处理后泛型返回。我让他转jsonObject后处理,然后返回List<Object>;过了一会我看了代码就觉得可以优化一下。然后就用java8的处理了一下。逻辑为两个数组,根据匹配id,将匹配上的那个map中的值赋值给泛型对象中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值