java8 对比两个 List ,遍历匹配数据的优化处理 支持一对多

 说明:根据云端设备数据集合和数据库设备数据集合,进行对比,本地设备和云端设备相同的,本地数据要进行更新,云端有本地没有的设备,本地要进行新增

//查询数据库 服务商下所有分机数据集合
List dbList = Lists.newArrayList();
//查询云端平台 所有分机信息集合
List cloudList = Lists.newArrayList();
//4.获取集合相同的部分进行更新
List list = compareListData(cloudList, dbList);

/**
 * @param cloudList 云端list
 * @param dbList    数据库list
 * @return List
 * @description: TODO 对两个 List 遍历匹配数据的优化处理
 * @author hyh
 * @date 2022/3/30 16:35
 */
public static List compareListData(List cloudList, List dbList) {
    //两个List 如果ID==CHANNEL_ID  用UUID替换掉CHANNEL_ID
    List 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 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());

你可能感兴趣的:(JAVA,java)