当前位置: 首页 > news >正文

列表对象复制属性到另一个列表对象 从List<Object>另一个List<Object>

目录

    • 事件起因
    • 环境和工具
    • 解决办法
    • 结束语

事件起因

在写一个市级的项目时,遇到了一个问题,这个项目涉及的数据内容非常大,光是数据库文件的大小就已经达到了12G,数据的规模大致是在百万级的,光是我这次参与处理的数据就有10w(最后我跑出来的数据是10w,但处理的数据不止如此)

本次运行的数据库,因为我的盘大小不够,我还额外装了一块2T硬盘
在这里插入图片描述
在处理这个项目的数据的过程中有一个 将数据存在原来多个表的同一个物料的信息汇总起来然后放入我所要进行存储的一张表中去,大致过程是:物料有唯一的sn码,然后每个阶段物料都有进行流转会产生业务流程的数据,这个数据分别在不同的表中,比如说物料入库,出库,入下级仓库,出下级仓库,入暂存点,出暂存点和安装,每个阶段都会产生业务数据信息,然后我要将每个阶段的信息进行汇总,(每个阶段的信息都在不同的数据库表中,单表的数据量都很大,上10w级)此时使用连表在数据库中去执行这样的效率比较低下,所以采用的是在每个阶段去查询满足查询条件的当前阶段的数据,然后在java的代码中去处理这些数据,让相同的物料编码sn去将这些实体属性的信息合并,
下面是这个实体的属性的展示,这个实体目前是有130多个属性值:(各阶段分别占有10多个属性)

在这里插入图片描述
在这里插入图片描述
现在各个阶段都查到了对应的数据,比如说,入库阶段有入库sn和入库相关信息,出库阶段有出库sn和出库相关信息,现要做的是将各个阶段同一sn的所有信息合并

环境和工具

jdk1.8
maven
idea2023

解决办法

在处理这个情况的方法在初步就有了,比如说,双重循环这两个列表,去遍历每一个对象,然后判断这些对象的sn是否相同,但是这样已经匹配的sn对象也会继续拿到其他的对象中去匹配,效率比较低下

有两个对象列表 List snInfo1 和List snInfo2
现优化这种情况,将其中的一个列表对象修改为map,其中的属性sn作为key,对应的每个对象作为value,代码如下:

/*** 对象复制到对象  source是之前就有的列表对象*/private List<SnInfoExtend> copyListToListBySn(List<SnInfoExtend> source, List<SnInfoExtend> source2){// 创建一个 Map,将 sn 作为键,Market 对象作为值Map<String, SnInfoExtend> snMap = source.stream().collect(Collectors.toMap(SnInfoExtend::getSourceSn, market -> market, (existing, replacement) -> replacement));// 合并 snList2 中的数据到 snList  关于下面那儿为什么要用toUpperCase: 因为 前面的流程 sn全是大写字母,到了安装的时候却变为了小写字母source2.forEach(market -> snMap.merge(market.getSourceSn().toUpperCase().trim(), market, (existing, replacement) -> {//仓库出库,这个比较特殊  只能根据箱码进行更新 箱码的话,肯定是会重复的//入暂存点  8个字段更新if(replacement.getPointRecName() != null){existing.setPointRecName(replacement.getPointRecName());}if(replacement.getPointRecCompany() != null){existing.setPointRecCompany(replacement.getPointRecCompany());}if(replacement.getPointRecPhonePro() != null){existing.setPointRecPhonePro(replacement.getPointRecPhonePro());}if(replacement.getPointShipNamePro() != null){existing.setPointShipNamePro(replacement.getPointShipNamePro());}if(replacement.getPointrRecAddPro() != null){existing.setPointrRecAddPro(replacement.getPointrRecAddPro());}if(replacement.getRecBusinessTypePoint() != null){existing.setRecBusinessTypePoint(replacement.getRecBusinessTypePoint());}if(replacement.getRecTimePoint() != null){existing.setRecTimePoint(replacement.getRecTimePoint());existing.setUpdatedTime(replacement.getRecTimePoint());}if(replacement.getPointRecProblem() != null){existing.setPointRecProblem(replacement.getPointRecProblem());}//出暂存点和领料//出暂存点if(replacement.getPointShipName() != null){existing.setPointShipName(replacement.getPointShipName());}if(replacement.getPointShipCompany() != null){existing.setPointShipCompany(replacement.getPointShipCompany());}if(replacement.getPointShipPhonePro() != null){existing.setPointShipPhonePro(replacement.getPointShipPhonePro());}if(replacement.getShipTimePoint() != null){existing.setShipTimePoint(replacement.getShipTimePoint());existing.setUpdatedTime(replacement.getShipTimePoint());}if(replacement.getShipBusinessTypePoint() != null){existing.setShipBusinessTypePoint(replacement.getShipBusinessTypePoint());}//领料if(replacement.getTeamRecName() != null){existing.setTeamRecName(replacement.getTeamRecName());}if(replacement.getTeamRecPhonePro() != null){existing.setTeamRecPhonePro(replacement.getTeamRecPhonePro());}if(replacement.getRecTimeTeam() != null){existing.setRecTimeTeam(replacement.getRecTimeTeam());existing.setUpdatedTime(replacement.getRecTimeTeam());}if(replacement.getTeamRecNamePro() != null){existing.setTeamRecNamePro(replacement.getTeamRecNamePro());}if(replacement.getTeamRecCropping() != null){existing.setTeamRecCropping(replacement.getTeamRecCropping());}if(replacement.getRecBusinessTypeTeam() != null){existing.setRecBusinessTypeTeam(replacement.getRecBusinessTypeTeam());}//安装if(replacement.getTeamShipName() != null){existing.setTeamShipName(replacement.getTeamShipName());}if(replacement.getTeamShipPhonePro() != null){existing.setTeamShipPhonePro(replacement.getTeamShipPhonePro());}if(replacement.getTeamShipNamePro() != null){existing.setTeamShipNamePro(replacement.getTeamShipNamePro());}if(replacement.getShipTimeTeam() != null){existing.setShipTimeTeam(replacement.getShipTimeTeam());existing.setUpdatedTime(replacement.getShipTimeTeam());}if(replacement.getTeamShipAdd() != null){existing.setTeamShipAdd(replacement.getTeamShipAdd());}if(replacement.getTeamShipProblem() != null){existing.setTeamShipProblem(replacement.getTeamShipProblem());}if(replacement.getTransferTime() != null){existing.setTransferTime(replacement.getTransferTime());existing.setUpdatedTime(replacement.getTransferTime());}if(replacement.getShipBusinessTypeTeam() != null){existing.setShipBusinessTypeTeam(replacement.getShipBusinessTypeTeam());}return existing;}));// 最终的合并结果在 snList 中List<SnInfoExtend> mergedList = new ArrayList<>(snMap.values());return mergedList;}

上面已经将这个过程封装了为了一个方法,
该方法的效果为:传入两个列表对象,将第一个对象转换为一个map,有一点需要注意的地方,这儿会将snSource这个字段的字符串的字母转换为大写字母toUpperCase,且去除收尾的空格trim(),若不需要自行去代码里面去修改

结束语

若是对你有所帮助的话,希望能获得你的 点赞、评论、收藏,这将是对我很大的鼓励!!! 这对我真的很重要!!!
蟹蟹٩(‘ω’)و

相关文章:

列表对象复制属性到另一个列表对象 从List<Object>另一个List<Object>

目录 事件起因环境和工具解决办法结束语 事件起因 在写一个市级的项目时&#xff0c;遇到了一个问题&#xff0c;这个项目涉及的数据内容非常大&#xff0c;光是数据库文件的大小就已经达到了12G&#xff0c;数据的规模大致是在百万级的&#xff0c;光是我这次参与处理的数据就…...

Python基本情况

Python&#xff08;发音&#xff1a;/ˈpaɪθən/ &#xff09;是一种强大的编程语言&#xff0c;它简单易学&#xff0c;提供众多高级的数据结构&#xff0c;让我们可以面向对象进行编程。Python 的语法优雅&#xff0c;由于是一个解释性语言&#xff0c;更贴近人类自然语言&…...

【精华】AI Agent:大模型改变世界的“钥匙”

文章目录 1.Auto-GPT2.BabyAGI3.AgentGPT4.GodMode5.AI Town6.ChatDev 当前大模型的本质是大语言模型&#xff08;Large Language Model, LLM&#xff09;。相较于传统的自然语言处理模型&#xff0c;LLM通过无监督训练&#xff0c;从大量文本数据中学习自然语言的模式和结构&a…...

CVPR2023 RIFormer, 无需TokenMixer也能达成SOTA性能的极简ViT架构

编辑 | Happy 首发 | AIWalker 链接 | https://mp.weixin.qq.com/s/l3US8Dsd0yNC19o7B1ZBgw project, paper, code Token Mixer是ViT骨干非常重要的组成成分&#xff0c;它用于对不同空域位置信息进行自适应聚合&#xff0c;但常规的自注意力往往存在高计算复杂度与高延迟问题。…...

瑞萨MCU入门教程(非常详细的瑞萨单片机入门教程)

瑞萨MCU零基础入门系列教程 前言 得益于瑞萨强大的MCU、强大的软件开发工具(e studio)&#xff0c;也得益于瑞萨和RA生态工作室提供的支持&#xff0c;我们团队编写了《ARM嵌入式系统中面向对象的模块编程方法》&#xff0c;全书37章&#xff0c;将近500页: 讲解面向对象编程…...

【Java】采用 Tabula 技术对 PDF 文件内表格进行数据提取

某天项目组来了个需求说需要提取 PDF 文件中数据作为数据沉淀使用&#xff0c;这是因为第三方系统不提供数据接口所以只能够出此下策。 就据我所知&#xff0c;PDF 文件内数据提取目前有 3 种解决方案&#xff1a; 第一种&#xff0c;资金足够的话可以直接通过人工智能对 PDF…...

完全保密的以太坊交易:Aztec网络的隐私架构

1. 引言 Aztec为隐私优先的以太坊zkRollup&#xff1a;即其为具有完全隐私保护的L2。 为了理解私有交易的范式变化性质&#xff0c;以及为什么将隐私直接构建到网络架构中很重要&#xff0c;必须首先讨论为什么以太坊不是私有的。 2. 以太坊&#xff1a;公有链 以太坊为具有…...

初识Java 9-1 内部类

目录 创建内部类 到外部类的链接 使用.this和.new 内部类和向上转型 在方法和作用域中的内部类 匿名内部类 嵌套类 接口中的类 从多嵌套的内部类中访问外部人员 本笔记参考自&#xff1a; 《On Java 中文版》 定义在另一个类中的类称为内部类。利用内部类&#xff0c;…...

合宙Air724UG LuatOS-Air LVGL API控件-屏幕横屏竖屏切换(Rotation)

屏幕横屏竖屏切换(Rotation) lvgl.disp_set_rotation(nil, lvgl.DISP_ROT_angle) 屏幕横屏竖屏切换显示&#xff0c;core版本号要>3202参数 参数类型释义取值nil无意义nilangle显示角度0,90,270,360 返回值nil 例子 lvgl.init()- -初始化 lvgl.disp_set_rotation(nil,…...

在Unity中,Instantiate函数用于在场景中创建一个新的游戏对象实例

在Unity中&#xff0c;Instantiate函数用于在场景中创建一个新的游戏对象实例。它的语法如下所示&#xff1a; public static Object Instantiate(Object original, Vector3 position, Quaternion rotation); original&#xff1a;要实例化的原始游戏对象。position&#xff1…...

解决 tesserocr报错 Failed to init API, possibly an invalid tessdata path : ./

问题描述 我们在初次使用tesserocr库的时候&#xff0c;可能会报以下错误&#xff1a; RuntimeError: Failed to init API, possibly an invalid tessdata path: ./ 这是因为我们在使用 conda 创建的环境中找不到"tessdata"这个文件夹。 解决办法 这时候把Tessera…...

使用Python CV2融合人脸到新图片--优化版

优化说明 上一版本人脸跟奥特曼图片合并后边界感很严重&#xff0c;于是查找资料发现CV2还有一个泊松函数很适合融合图像。具体代码如下&#xff1a; import numpy as np import cv2usrFilePath "newpic22.jpg" atmFilePath "atm2.jpg" src cv2.imrea…...

Python分享之对象的属性

Python一切皆对象(object)&#xff0c;每个对象都可能有多个属性(attribute)。Python的属性有一套统一的管理方案。 属性的__dict__系统 对象的属性可能来自于其类定义&#xff0c;叫做类属性(class attribute)。类属性可能来自类定义自身&#xff0c;也可能根据类定义继承来的…...

编程参考 - std::exchange和std::swap的区别

这两个功能是C standard library中的Standard template library中的一部分。容易混淆&#xff0c;我们来看下它们的区别。 exchange&#xff1a; 这个函数是一个返回原先值的set函数。 std::exchange is a setter returning the old value. int z std::exchange(x, y); Af…...

Sentinel整合RestTemplate

resttemplate开启sentinel保护配置resttemplate.sentinel.enabledtrue配置sentinel-dashboard地址spring.cloud.sentinel.transport.dashboardlocalhost:8858\ spring.cloud.sentinel.transport.dashboard.port8739 实例化RestTemplate并加入SentinelRestTemplate注解Configura…...

微前端学习(下)

一、课程目标 qiankun 整体运行流程微前端实现方案二、课程大纲 qiankun 整体流程微前端方案实现DIY微前端核心能力1、微前端方案实现 基于 iframe 完全隔离的方案、使用纯的Web Components构建应用EMP基于webpack module federationqiankun、icestark 自己实现JS以及样式隔离2…...

Android Splash实现

1、创建Activity package com.wsy.knowledge.ui.splashimport android.animation.Animator import android.animation.AnimatorListenerAdapter import android.annotation.SuppressLint import android.os.Build import android.os.Looper import android.util.Log import an…...

FPGA projet : VGA

在vga屏幕上显示 &#xff1a; 野火科技 相比于上个工程&#xff0c;只需要修改 vga_pix 模块即可。 注意存储器类型变量的定义&#xff1a;reg 【宽度】<名称>【深度】 赋值 always &#xff08;poseedge vga_clk&#xff09;begin 为每一行赋值&#xff0c;不可位赋…...

JDK8 升级至JDK19

优质博文IT-BLOG-CN 目前部分项目使用JDK8&#xff0c;部分项目使用JDK19因此&#xff0c;环境变量中还是保持JDK8&#xff0c;只需要下载JDK19免安装版本&#xff0c;通过配置IDEA就可以完成本地开发。 一、IDEA 环境设置 【1】通过快捷键CTRL SHIFT ALT S或者File->P…...

Python3.10 IDLE更换主题

前言 自定义主题网上有很多&#xff0c;3.10IDLE的UI有一些新的东西&#xff0c;直接扣过来会有些地方覆盖不到&#xff0c;需要自己测试着添几行配置&#xff0c;以下做个记录。 配置文件路径 Python安装目录下的Lib\idlelib\config-highlight.def。如果是默认安装&#xf…...

Spring AI 入门:Java 开发者的生成式 AI 实践之路

一、Spring AI 简介 在人工智能技术快速迭代的今天&#xff0c;Spring AI 作为 Spring 生态系统的新生力量&#xff0c;正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务&#xff08;如 OpenAI、Anthropic&#xff09;的无缝对接&…...

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

AI编程--插件对比分析:CodeRider、GitHub Copilot及其他

AI编程插件对比分析&#xff1a;CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展&#xff0c;AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者&#xff0c;分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

Java线上CPU飙高问题排查全指南

一、引言 在Java应用的线上运行环境中&#xff0c;CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时&#xff0c;通常会导致应用响应缓慢&#xff0c;甚至服务不可用&#xff0c;严重影响用户体验和业务运行。因此&#xff0c;掌握一套科学有效的CPU飙高问题排查方法&…...

Python 包管理器 uv 介绍

Python 包管理器 uv 全面介绍 uv 是由 Astral&#xff08;热门工具 Ruff 的开发者&#xff09;推出的下一代高性能 Python 包管理器和构建工具&#xff0c;用 Rust 编写。它旨在解决传统工具&#xff08;如 pip、virtualenv、pip-tools&#xff09;的性能瓶颈&#xff0c;同时…...

面向无人机海岸带生态系统监测的语义分割基准数据集

描述&#xff1a;海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而&#xff0c;目前该领域仍面临一个挑战&#xff0c;即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)

前言&#xff1a; 在Java编程中&#xff0c;类的生命周期是指类从被加载到内存中开始&#xff0c;到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期&#xff0c;让读者对此有深刻印象。 目录 ​…...

STM32HAL库USART源代码解析及应用

STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...

宇树科技,改名了!

提到国内具身智能和机器人领域的代表企业&#xff0c;那宇树科技&#xff08;Unitree&#xff09;必须名列其榜。 最近&#xff0c;宇树科技的一项新变动消息在业界引发了不少关注和讨论&#xff0c;即&#xff1a; 宇树向其合作伙伴发布了一封公司名称变更函称&#xff0c;因…...

用递归算法解锁「子集」问题 —— LeetCode 78题解析

文章目录 一、题目介绍二、递归思路详解&#xff1a;从决策树开始理解三、解法一&#xff1a;二叉决策树 DFS四、解法二&#xff1a;组合式回溯写法&#xff08;推荐&#xff09;五、解法对比 递归算法是编程中一种非常强大且常见的思想&#xff0c;它能够优雅地解决很多复杂的…...