说明:根据云端设备数据集合和数据库设备数据集合,进行对比,本地设备和云端设备相同的,本地数据要进行更新,云端有本地没有的设备,本地要进行新增
//查询数据库 服务商下所有分机数据集合 List<CcExtensionTelephone> dbList = Lists.newArrayList(); //查询云端平台 所有分机信息集合 List<CcExtensionTelephone> cloudList = Lists.newArrayList();//4.获取集合相同的部分进行更新 List<CcExtensionTelephone> list = compareListData(cloudList, dbList); /** * @param cloudList 云端list * @param dbList 数据库list * @return List<CcExtensionTelephone> * @description: TODO 对两个 List 遍历匹配数据的优化处理 * @author hyh * @date 2022/3/30 16:35 */ public static List<CcExtensionTelephone> compareListData(List<CcExtensionTelephone> cloudList, List<CcExtensionTelephone> dbList) { //两个List 如果ID==CHANNEL_ID 用UUID替换掉CHANNEL_ID List<CcExtensionTelephone> resultList = cloudList.stream().map(cloudTel -> dbList.stream() .filter(dbTel -> Objects.equals(cloudTel.getExtNumber(), dbTel.getExtNumber()) && Objects.equals(cloudTel.getMac(), dbTel.getMac()))//若云端分机号和本地分机号相同 .findFirst().map(tel -> { Long id = tel.getId(); BeanUtils.copyProperties(cloudTel, tel);//将cloudList下的数据替换掉本地数据 tel.setId(id); return tel; }).orElse(//若云端分机号和本地分机号不相同 null)) .filter(Objects::nonNull).collect(Collectors.toList()); return resultList; }
//需要新增的云端分机信息集合 List<CcExtensionTelephone> addTelCloudList = Lists.newArrayList(); //6.云端分机集合去过滤更新的分机集合数据,剩下的即新增分机的集合 addTelCloudList.removeIf(cloudTel -> list.stream().filter(dbTel -> Objects.equals(cloudTel.getExtNumber(), dbTel.getExtNumber()) && Objects.equals(cloudTel.getMac(), dbTel.getMac())).findAny().isPresent());