维度数据转换为采集信息实体的Java代码解析
这段代码是一个名为 convert 的Java方法,它用于将维度数据(dimEntities)转换为采集信息实体(collectInfoEntities)。该方法接收一个 m8Type 参数,用于指定需要转换的M8类型。
该方法的逻辑如下:
-
判断维度数据和采集信息实体是否为空:
- 如果两个列表都不为空,则进行转换操作。
- 如果维度数据列表不为空,而采集信息实体列表为空,则插入所有维度数据生成的采集信息实体。
- 如果采集信息实体列表不为空,而维度数据列表为空,则删除所有匹配的采集信息实体。
-
转换操作:
- 从维度数据中获取M8对象ID列表。
- 根据M8对象ID列表和指定的M8类型,过滤出需要删除的采集信息实体,并将它们添加到
deleteList中。 - 根据维度数据和M8类型生成新的采集信息实体,并将它们添加到
insertList中。 - 根据维度数据和采集信息实体的对应关系,找出需要更新的采集信息实体。对于需要更新的采集信息实体,记录修改的属性并将它们添加到
updateList中。
具体来说,该代码使用了以下步骤:
- 获取M8对象ID列表: 使用
stream().map(getKeyFunction())从维度数据列表中提取出M8对象ID,并将其保存到m8ObjectIdList中。 - 过滤需要删除的采集信息实体: 使用
stream().filter(ci -> validM8type(ci) && !m8ObjectIdList.contains(ci.getM8ObjectId()))过滤出满足以下条件的采集信息实体:- 采集信息实体的M8类型与指定的
m8Type相匹配。 - 采集信息实体的M8对象ID不在
m8ObjectIdList中。
- 采集信息实体的M8类型与指定的
- 生成新的采集信息实体: 使用
stream().forEach(dim -> newCollectInfos(m8Type, dim, newCiList))根据维度数据和指定的m8Type生成新的采集信息实体,并将它们添加到newCiList中。 - 找出需要更新的采集信息实体: 使用
stream().filter(dim -> {...})过滤出满足以下条件的维度数据:- 维度数据的M8对象ID在
ciObjectIdList中。 - 维度数据与对应的采集信息实体存在属性差异。
- 维度数据的M8对象ID在
- 记录修改的属性: 使用
getChangedProperties(dim, collectInfoMap.get(getDimM8ObjectId(dim)).get(0))获取维度数据与对应采集信息实体的属性差异,并将其记录到changedProperties中。 - 将需要更新的采集信息实体添加到
updateList中: 使用stream().map(dim -> toCollectInfo(dim, collectInfoMap.get(getDimM8ObjectId(dim)).get(0)))将修改后的采集信息实体添加到updateList中。
该代码使用了Java 8 Stream API,简化了代码结构,提高了代码可读性和效率。
该代码实现了维度数据与采集信息实体之间的转换,并根据数据关系进行相应的插入、更新和删除操作,确保了数据的一致性。
原文地址: https://www.cveoy.top/t/topic/nPU4 著作权归作者所有。请勿转载和采集!