Java,集合中有两条数据来自远端接口,把远端接口中的数据,合并到集合对象中?

最近在写代码的时候出现了一个问题,我自己本地接口中,有一部分数据来自于远程接口,拿到是拿到了,我不知道如何他们收集到本地接口中.

代码

public class PriceTest{
@Autowired
    private SysResourcesMapper sysResourcesMapper;



    // private static final String DAILY_RECORD_FLOW = "/node/daily/:date";//收入=上游收益,价格=上游价格
    private static String DAILY_RECORD_FLOW_TWO = "/node/daily/";  //test

    private static final Calendar date = Calendar.getInstance();



 @Test
    public void testMerge() throws Exception {

        Map<String,String> map = new HashMap<>();

        // 1.设置日期格式,
        SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
        date.setTime(new Date());
        date.add(Calendar.DATE,-1);

        // 2.拿到日期,拼接到查询参数中
        String dateResult = format.format(date.getTime());
        DAILY_RECORD_FLOW_TWO = DAILY_RECORD_FLOW_TWO + dateResult;
        String result = Utils.pullResourcesTaskByTime(map, DAILY_RECORD_FLOW_TWO);

        // 3.拿到数据后转换Java对象
        JSONObject all = JSONObject.parseObject(result);
        JSONArray nowData = all.getJSONArray("data");
        List<SysDailyIncomeFlow> flowList = nowData.toJavaList(SysDailyIncomeFlow.class);

        // 4.查询我们需要存放的对象中
        SysResources resources = new SysResources();

        // 5. 
        flowList.stream().map((item) -> {
            // 获取价格、收入
            BigDecimal price = item.getPrice();
            BigDecimal income = item.getIncome();

            // 上游价格=价格 || 收入=上游收益
            resources.setUpstreamPrice(price);
            resources.setUpstreamProfit(income);

        }).collect(Collectors.toList());


    }
}

我现在有一个SysResouces对象里面的数据,是本地接口查询的,但数据中有一个上游收益,上游价格,是来自于Utils工具类响应给我的,我想每个SysResouces原本的这两条数据,替换成接口中来的,然后变成一个集合,那个条件最好可以用uuid限制一下.

谢谢谢谢,这种接口开发流程,我第一次接触,不太懂

阅读 1.8k
3 个回答
新手上路,请多包涵

可以再去了解下stream流,

         List<SysResources> = flowList.stream().map((item) -> {
            // 获取价格、收入
            BigDecimal price = item.getPrice();
            BigDecimal income = item.getIncome();
            SysResources resources = new SysResources();
            resources.setUpstreamPrice(price);
            resources.setUpstreamProfit(income);
            return resources;
        }).collect(Collectors.toList());

我没看懂问题中,Util 中的数据和 Source 中的对应关系。首先理清他们的对应关系。比如如果是一一对应,找到谁和谁一一对应,然后组装就可以,至于 uuid 这个设置看起来和这两个数据的收集匹配没什么关系。

大家好,我维护一下我的问题,后面我是这样解决的,我的标题有一点问题,合并到集合对象是没有错,不过应该是查询到的集合对象。

话不多说,开始展示代码

        
        // 1.添加查询条件
        HashMap<String, String> map1 = new HashMap<>();

        // 2.设置日期格式,
        Calendar date = Calendar.getInstance();

        SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
        date.setTime(new Date());
        date.add(Calendar.DATE, -1);
        
        //3.使用工具类,调用拉取代码的接口
        String result = Utils.pullResourcesTaskByTime(map1, DAILY_RECORD_FLOW + format.format(date.getTime()));

        // 4.拿到数据后转换Java对象
        JSONObject all = JSONObject.parseObject(result);
        JSONArray nowData = all.getJSONArray("data");
        List<SysDailyIncomeFlow> flowList = nowData.toJavaList(SysDailyIncomeFlow.class);

    // 5. 通过查询拿到资源集合对象
                List<SysUnitPriceAllocation> sysUnitPriceAllocations = sysUnitPriceAllocationMapper.selectSysUnitPriceAllocationList(sysUnitPriceAllocation);

    // 6.通过uuid做比较便利出来数据
    for (SysUnitPriceAllocation unitPriceAllocation : sysUnitPriceAllocations) {
                calculation(unitPriceAllocation);
                for (SysDailyIncomeFlow sysDailyIncomeFlow : flowList) {
                    if (unitPriceAllocation.getUuid().equals(sysDailyIncomeFlow.getUuid())) {
                        unitPriceAllocation.setUpstreamPrice(sysDailyIncomeFlow.getPrice());
                        unitPriceAllocation.setUpstreamProfit(sysDailyIncomeFlow.getIncome());
                        // 通过角色计算,每个角色拿到的收益
                        format(unitPriceAllocation, roleName);
                    }
                }
            }


总结:
比较关键的是
第一点 将集合中拉到的数据转为Json数组,注意是数组
第二点 是通过增加for循环便利查询出来的集合对象,再便利接口中的数据,
再通过if判断uuid做比较,把本地查询出来的数据,需要替换的set到每个对象中,
就可以实现此功能了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏