列表对象复制属性到另一个列表对象 从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>
目录 事件起因环境和工具解决办法结束语 事件起因 在写一个市级的项目时,遇到了一个问题,这个项目涉及的数据内容非常大,光是数据库文件的大小就已经达到了12G,数据的规模大致是在百万级的,光是我这次参与处理的数据就…...
Python基本情况
Python(发音:/ˈpaɪθən/ )是一种强大的编程语言,它简单易学,提供众多高级的数据结构,让我们可以面向对象进行编程。Python 的语法优雅,由于是一个解释性语言,更贴近人类自然语言&…...
【精华】AI Agent:大模型改变世界的“钥匙”
文章目录 1.Auto-GPT2.BabyAGI3.AgentGPT4.GodMode5.AI Town6.ChatDev 当前大模型的本质是大语言模型(Large Language Model, LLM)。相较于传统的自然语言处理模型,LLM通过无监督训练,从大量文本数据中学习自然语言的模式和结构&a…...
CVPR2023 RIFormer, 无需TokenMixer也能达成SOTA性能的极简ViT架构
编辑 | Happy 首发 | AIWalker 链接 | https://mp.weixin.qq.com/s/l3US8Dsd0yNC19o7B1ZBgw project, paper, code Token Mixer是ViT骨干非常重要的组成成分,它用于对不同空域位置信息进行自适应聚合,但常规的自注意力往往存在高计算复杂度与高延迟问题。…...
瑞萨MCU入门教程(非常详细的瑞萨单片机入门教程)
瑞萨MCU零基础入门系列教程 前言 得益于瑞萨强大的MCU、强大的软件开发工具(e studio),也得益于瑞萨和RA生态工作室提供的支持,我们团队编写了《ARM嵌入式系统中面向对象的模块编程方法》,全书37章,将近500页: 讲解面向对象编程…...
【Java】采用 Tabula 技术对 PDF 文件内表格进行数据提取
某天项目组来了个需求说需要提取 PDF 文件中数据作为数据沉淀使用,这是因为第三方系统不提供数据接口所以只能够出此下策。 就据我所知,PDF 文件内数据提取目前有 3 种解决方案: 第一种,资金足够的话可以直接通过人工智能对 PDF…...
完全保密的以太坊交易:Aztec网络的隐私架构
1. 引言 Aztec为隐私优先的以太坊zkRollup:即其为具有完全隐私保护的L2。 为了理解私有交易的范式变化性质,以及为什么将隐私直接构建到网络架构中很重要,必须首先讨论为什么以太坊不是私有的。 2. 以太坊:公有链 以太坊为具有…...
初识Java 9-1 内部类
目录 创建内部类 到外部类的链接 使用.this和.new 内部类和向上转型 在方法和作用域中的内部类 匿名内部类 嵌套类 接口中的类 从多嵌套的内部类中访问外部人员 本笔记参考自: 《On Java 中文版》 定义在另一个类中的类称为内部类。利用内部类,…...
合宙Air724UG LuatOS-Air LVGL API控件-屏幕横屏竖屏切换(Rotation)
屏幕横屏竖屏切换(Rotation) lvgl.disp_set_rotation(nil, lvgl.DISP_ROT_angle) 屏幕横屏竖屏切换显示,core版本号要>3202参数 参数类型释义取值nil无意义nilangle显示角度0,90,270,360 返回值nil 例子 lvgl.init()- -初始化 lvgl.disp_set_rotation(nil,…...
在Unity中,Instantiate函数用于在场景中创建一个新的游戏对象实例
在Unity中,Instantiate函数用于在场景中创建一个新的游戏对象实例。它的语法如下所示: public static Object Instantiate(Object original, Vector3 position, Quaternion rotation); original:要实例化的原始游戏对象。position࿱…...
解决 tesserocr报错 Failed to init API, possibly an invalid tessdata path : ./
问题描述 我们在初次使用tesserocr库的时候,可能会报以下错误: RuntimeError: Failed to init API, possibly an invalid tessdata path: ./ 这是因为我们在使用 conda 创建的环境中找不到"tessdata"这个文件夹。 解决办法 这时候把Tessera…...
使用Python CV2融合人脸到新图片--优化版
优化说明 上一版本人脸跟奥特曼图片合并后边界感很严重,于是查找资料发现CV2还有一个泊松函数很适合融合图像。具体代码如下: import numpy as np import cv2usrFilePath "newpic22.jpg" atmFilePath "atm2.jpg" src cv2.imrea…...
Python分享之对象的属性
Python一切皆对象(object),每个对象都可能有多个属性(attribute)。Python的属性有一套统一的管理方案。 属性的__dict__系统 对象的属性可能来自于其类定义,叫做类属性(class attribute)。类属性可能来自类定义自身,也可能根据类定义继承来的…...
编程参考 - std::exchange和std::swap的区别
这两个功能是C standard library中的Standard template library中的一部分。容易混淆,我们来看下它们的区别。 exchange: 这个函数是一个返回原先值的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屏幕上显示 : 野火科技 相比于上个工程,只需要修改 vga_pix 模块即可。 注意存储器类型变量的定义:reg 【宽度】<名称>【深度】 赋值 always (poseedge vga_clk)begin 为每一行赋值,不可位赋…...
JDK8 升级至JDK19
优质博文IT-BLOG-CN 目前部分项目使用JDK8,部分项目使用JDK19因此,环境变量中还是保持JDK8,只需要下载JDK19免安装版本,通过配置IDEA就可以完成本地开发。 一、IDEA 环境设置 【1】通过快捷键CTRL SHIFT ALT S或者File->P…...
Python3.10 IDLE更换主题
前言 自定义主题网上有很多,3.10IDLE的UI有一些新的东西,直接扣过来会有些地方覆盖不到,需要自己测试着添几行配置,以下做个记录。 配置文件路径 Python安装目录下的Lib\idlelib\config-highlight.def。如果是默认安装…...
C# OpenVino Yolov8 Pose 姿态识别
效果 项目 代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using OpenCvSharp;namespace OpenVino_Yolov8_Demo {public…...
北邮22级信通院数电:Verilog-FPGA(1)实验一“跑通第一个例程” 过程中遇到的常见问题与解决方案汇总(持续更新中)
北邮22信通一枚~ 跟随课程进度更新北邮信通院数字系统设计的笔记、代码和文章 持续关注作者 迎接数电实验学习~ 获取更多文章,请访问专栏: 北邮22级信通院数电实验_青山如墨雨如画的博客-CSDN博客 目录 问题一:Verilog代码没有跑通 报…...
CSS - 鼠标移入整行高亮显示,适用于会员套餐各参数对比页面(display: table,div 转表格形式)
效果图 可根据基础示例和进阶示例,复制进行改造样式。 如下图所示,本文提供 2 个示例。 基础示例 找个 HTML 页面,一键复制运行。 <body><h1 style"text-align: center;">基础示例</h1><section class"…...
无涯教程-JavaScript - ATAN2函数
描述 The ATAN2 function returns the arctangent, or inverse tangent, of the specified x- and ycoordinates, in radians, between -π/2 and π/2. 语法 ATAN2 (x_num, y_num)争论 Argument描述Required/OptionalX_numThe x-coordinate of the point.RequiredY_numThe…...
Tomcat 下部署 jFinal
1、检查web.xml 配置,在 tomcat 下部署需要检查 web.xml 是否存在,并且要确保配置正确,配置格式如下。 <?xml version"1.0" encoding"UTF-8"?> <web-app xmlns:xsi"http://www.w3.org/2001/XMLSchema-i…...
【Spatial-Temporal Action Localization(二)】论文阅读2017年
文章目录 1. ActionVLAD: Learning spatio-temporal aggregation for action classification [code](https://github.com/rohitgirdhar/ActionVLAD/)[](https://github.com/rohitgirdhar/ActionVLAD/)摘要和结论引言:针对痛点和贡献相关工作模型框架思考不足之处 2.…...
二维码智慧门牌管理系统:数据现势性,满足应用需求的根本保证
文章目录 前言一、项目背景二、数据的现势性三、系统的优势四、应用前景 前言 在当今信息化社会,数据的重要性日益凸显,尤其是数据的现势性,它决定着服务的质量和满足应用需求的能力。近日,一个创新的二维码智慧门牌管理系统项目…...
BF算法(C++)简单讲解
BF算法匹配过程易理解,若匹配,子串和主串都往下移一位。不匹配时,主串回溯至本次匹配开始下标的下一位。例:图中第三趟匹配时,主串到第七位时与子串不匹配,这次匹配主串是从第三位开始的,所以下…...
JVM 虚拟机 ----> Java 类加载机制
文章目录 JVM 虚拟机 ----> Java 类加载机制一、概述二、类的生命周期1、类加载过程(Loading)(1)加载(2)验证(3)准备(4)解析(5)初始…...
《protobuf》基础语法2
文章目录 枚举类型ANY 类型oneof 类型map 类型改进通讯录实例 枚举类型 protobuf里有枚举类型,定义如下 enum PhoneType {string home_addr 0;string work_addr 1; }同message一样,可分为 嵌套定义,文件内定义,文件外定义。不…...
网站空间商盗取数据/网站互联网推广
上一篇刚刚完成了nagios的自动安装,这篇继续吧,想到前些天手动配置kickstart服务器过程比较繁琐,思路也不够清晰,还是把安装配置过程写进脚本非常方便,感觉是一劳永逸,降低后续工作的劳动量,而且…...
网站建设公司上海做网站公司哪家好/国内永久免费的云服务器
类型检查和自动转换 类型判断 is/!is表达式 if (obj is String) {print(obj.length) }if (obj !is String) { // same as !(obj is String)print("Not a String") } else {print(obj.length) }智能转换 kotlin具有自动转换类型的功能,在is/!is表达式,会根…...
云服务器哪家好/百度seo关键词排名价格
一.对象使用的高级 1,对象的key为字符串类型, value为任意类型 js var obj {name: "obj" } // 删除 delete obj.name // 添加 obj.age 18 // 如果age的key已存在就是修改值, 不存在就是添加键值对, 添加的key任意 // 注: 获取的页面元素(标签对象)也可以任意添加/…...
做外销网站/长沙排名优化公司
要在 Android 中构建一个应用程序,使其能自动将文件发送给微信上的联系人,您需要使用微信的开放平台 API。您可以使用微信的 SDK 来实现这一目的。首先需要注册一个开发者账号, 然后在开发者后台申请权限和获取 API 密钥。接下来可以使用 SDK 提供的 API…...
做网站需要啥备案之类的嘛/网站品牌推广策略
prn是什么文件?使用打印机打印文件时,如果你在打印设置界面中选择“输出到文件”,那么随后输出到指定目录的文件默认是以.prn为扩展名,这个文件就是所谓的“prn文件”。prn文件虽然扩展名都是.prn,但对于不同品牌的打印机&#x…...
电商产品推广方案范文/百度排名优化
一、概念区别 1. 集群:多部署几台服务器,每台服务器上运行相同的项目的代码。 集群主要的使用场景是为了分担请求的压力,也就是在几个服务器上部署相同的应用程序,来分担客户端请求,部署在不同服务器上的同一个子系统应…...