java 两个List对象取交集 差集 以及交集更新

摘要:
Listlistpo=BeanUtils.transferList(mainDataMd0006Params,MainDataMd0006PO.class);//查询存在的--根据批次编码Listlistup=mainDataMd0006Service.selectBatchIds(listpo);//交集(list1&lis
List<MainDataMd0006PO> listpo = BeanUtils.transferList(mainDataMd0006Params, MainDataMd0006PO.class);

        //查询 存在的--根据批次编码
        List<MainDataMd0006PO> listup =mainDataMd0006Service.selectBatchIds(listpo);


        //交集 (list1 & list2) 取list1 表的数据
        List<MainDataMd0006PO> listupdate =listpo.stream().filter(item -> listup.stream().map(up ->up.getPOSID()).collect(
                        Collectors.toList()).contains(item.getPOSID())).collect(Collectors.toList());

        listupdate.stream().forEach(update -> listup.stream().filter(up ->Objects.equals(update.getPOSID(), up.getPOSID())).
                findAny().ifPresent(up ->update.setId(up.getId())));


        //差集 (list1 - list2)
        List<MainDataMd0006PO> listadd =listpo.stream().filter(item -> !listup.stream().map(up ->up.getPOSID()).collect(
                        Collectors.toList()).contains(item.getPOSID())).collect(Collectors.toList());

更新多个字段示例

List<IrrigationPlanListDTO> irrigationPlanListDTOList=new ArrayList<>();
 //赋值 irrigationTaskUniqueId
                    irrigationPlanListDTOList.stream().forEach(update->irrigationTaskDOList.stream().filter(
                            task->Objects.equals(update.getProcessId(),task.getProcessId())
                    ).findAny().ifPresent(task -> update.setIrrigationTaskUniqueId(task.getIrrigationTaskUniqueId()).setPlanUniqueId(task.getPlanUniqueId()) ));

更新多个字段时对应的实体类上面需要加注解@Accessors

@Data
@Accessors(chain = true)
public class IrrigationPlanListDTO implementsSerializable {

    /*** uniqueid
     */
    privateString planUniqueId;

    /*** 水肥灌溉计划名称
     */
    privateString planName;

    /*** 计划状态,0=禁用,1=启用
     */
    privateInteger status;

    /*** 任务uniqueid
     * */
    privateString irrigationTaskUniqueId;

    /*** 进程id
     * */
    privateString processId;

    /*** 计划下的总耗时
     * */
    privateLong timeCost;

    /*** 计划下总次数
     * */
    privateInteger totalCount;
}

免责声明:文章转载自《java 两个List对象取交集 差集 以及交集更新》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇小程序使用 editor 富文本编辑器填坑指南k8s的yaml说明下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

Vue实现左侧可伸缩

导出默认值{name:‘Home’,data(){return{openStatus:true,open_close:true,}},方法:{change()}this.openStatus=!this.openStatusif(this.open状态){setTimeout(()=˃{this.open_close=true},1000)}else{set...

sikuli简介

Sikuli脚本自动化,你在屏幕上看到的任何东西。Sikuli是一个开放源码的最初的用户界面设计组织在麻省理工学院的研究项目。现在是保持并进一步协调与开源社区开发的Sikuli实验室在美国科罗拉多州博尔德大学。Sikuli的MIT许可证下发布的。当然,你也可以使用sikuli的javaAPI使其在java环境下运行。小例子大体上了解sikuli的界面,下面来...

Redis设置Auth认证保护

Redis有一种保护数据安全的身份验证方法。有两种方法可以设置此身份验证。一个是通过配置文件。另一种是直接在Redis客户端命令中设置参数requirepas。首先是在配置文件中查找参数requirepass。这是配置Redis访问密码的参数。由于Redis具有很强的并发能力,并且只使用密码,攻击者可能会在短时间内发送大量密码猜测请求,这很容易被暴力破解。因...

WPF绑定功能常用属性介绍

这是实质上是System.Windows.Data.BindingMode.OneWay绑定的一种简化形式,它在源值不更改的情况下提供更好的性能。确定依赖属性绑定在默认情况下是单向还是双向的编程方法是:使用System.Windows.DependencyProperty.GetMetadata获取属性的属性元数据,然后检查System.Windows.Fr...

Linux系统添加永久静态路由的方法

按照Linux启动的顺序,rc本地的内容在Linux中的所有服务启动后执行。也就是说,local的内容在netfs之后执行。也就是说,当netfs启动时,不会添加服务器上的静态路由,因此无法成功装载netfs。...

adb

ADB(AndroidDebugBridge)ANR(ApplicationNoResponding)ADB实际上是Android调试桥AndroidDebugBridge的缩写。adb是C/S体系结构的命令行工具。这里我们介绍一些常用的命令:adbdevices,获取设备列表和设备状态[xuxu:~]$adbdevicesList-devicesattac...