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限制一下.
谢谢谢谢,这种接口开发流程,我第一次接触,不太懂
回答:
可以再去了解下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到每个对象中,
就可以实现此功能了
以上是 Java,集合中有两条数据来自远端接口,把远端接口中的数据,合并到集合对象中? 的全部内容, 来源链接: utcz.com/p/944738.html