文章目录

  • 前言
  • 一、如何转换?
  • 二、转换步骤

前言

最近在写业务的时候,遇到一个需求,要求把数据库的数据行,根据某个维度,把行转换为列去显示。如下图


说明: 系统里某个数据有一系列属性,属性值会根据某个时间维度去进行更新。然后就有了版本的概念,为了方便更新之前和之后进行对比,前端页面要求显示如图所示的方式。


一、如何转换?

如果数据是可以通过连表查询出来左侧样子,可以通过SQL的方式去做行与列的转换。我这边版本信息都是序列化成json字符串存储到db了,所以采取了Java程序转换的方法。

二、转换步骤

常言道,talk is cheap , show me the code , 下面就直接贴出转换的代码,给正在看此文章的你们提供一种思路

import com.alibaba.fastjson.JSON;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;/*** @author ZhiPeng.Lin (codingjava@qq.com)* @version 1.0.0* @date 2021/12/19 16:50*/
@Slf4j
public class TestConvert {public static void main(String[] args) {List<Attribute> sourceList = new ArrayList<>();for (int j = 0; j < 3; j++) {for (int i = 0; i < 3; i++) {sourceList.add(new Attribute("name" + i, "code" + i, "value" + j, "202" + j));}}log.info("原始:{}", JSON.toJSONString(sourceList));// 转换后的目标列表List<Map<String, String>> targetList = new ArrayList<>(4);// 临时map,存放已处理的对象Map<String, Map<String, String>> temp = new HashMap<>(8);sourceList.forEach(item -> {String name = item.getName();String code = item.getCode();String data = item.getData();String value = item.getValue();if (!temp.containsKey(name)) {// 添加到目标列表的mapMap<String, String> nodeMap = new HashMap<>(4);nodeMap.put("name", name);nodeMap.put("code", code);nodeMap.put(data, value);temp.put(name, nodeMap);targetList.add(nodeMap);} else {Map<String, String> map = temp.get(name);// 按属性名分组,如有相同的数据,往后追加map.put(data, value);}});log.info("转换后:{}", JSON.toJSONString(targetList));}
}/*** 数据实体.*/
@Data
@AllArgsConstructor
@NoArgsConstructor
class Attribute {private String name;private String code;private String value;private String data;
}

这里由于列是动态的,依据数据而定(后续可能新增新的年份)。所以目标列表的结构使用HashMap而不封装成一个实体。

码字不易,如果对你有帮助,点个赞啪~

Java代码实现行转列相关推荐

  1. Protobuf生成Java代码(命令行)

    1.说明 本文介绍Protobuf生成Java代码的方法, 下载必须的Protobuf工具, 然后通过命令行, 把.proto文件生成Java代码. 2.准备Protobuf工具 2.1.获取prot ...

  2. java输出m行n列方格_java从键盘输入两个整数m、n,生成一个m行n列的二维数组,对数组进行任...

    图片2113实在看不清楚,下面是一个5261 输出 3行4列 数组4102的例子1653,可以参考一下:版public class App72 {public static void main(Str ...

  3. java制作九行九列表格_将文中后9行文字转换成一个9行4列的表格,设置表格居中,表格列宽为2.5厘米..._考试资料网...

    问答题在考生文件夹下打开文档word.docx,按照要求完成下列操作并以该文件名(word.docx)保存文档. [文档开始] 2009年北平市中考招生计划低于10万人 晨报讯伴随初中毕业生人数连年下 ...

  4. 多层神经网络Java代码800行

    这个网络只有不到800行可以实现多层多分类任务,3层网络测试mnist数据集10分类,最高可以达到98.48%.这个程序包含13个子程序,有6个变量和8个本地路径.只需确保电脑已经安装java环境,并 ...

  5. java记录代码执行位置_记录执行的java代码的行号

    PHP interperts的代码,这意味着它每次运行程序时运行源代码.随着代码的读取(这使得行号打印输出变得微不足道),这样做的好处就在于它.然而,由于您无法进行深入优化(或进行任何运行前错误检查) ...

  6. kafka实际应用—>读取数据,并用java实现业务逻辑“行转列”

    kafka实际应用--读取数据,并用java实现业务逻辑"行转列" 一.业务需求 二.业务实现 2.1 kafka中创建topic: event_attendees_raw 2.2 ...

  7. Protobuf生成Java代码(Maven)

    1.说明 本文介绍Protobuf生成Java代码的方法, 配置对应的Maven插件, 把.proto文件生成Java代码. 2.插件配置 创建Maven工程grpc-compile, 修改pom.x ...

  8. oracle 行转列sql语句,行转列(sql行转列)

    sql语句行转列?怎么转啊 select MIN(id) as ID, name, sex, sum(case when num=2 then 2 end) as num2, sum(case whe ...

  9. excel总行数 java_计算Excel工作表列中的行数(提供的Java代码)

    参考我之前的问题 How to calculate number of rows in a column of Excel document using Java,我能够计算给定表格中的总列数.现在, ...

最新文章

  1. zabbix监控客户端(二)
  2. matlab怎么画单位圆的切线,matlab绘图曲线标注怎么输出角度单位,就是那个小圆圈?...
  3. sql 列求和_图解面试题:累计求和问题如何分析?
  4. Migrate blog from blogcn here
  5. 区块链应用大数据的优势有哪些
  6. centos7yum安装VirtualBox
  7. MySQL提取字符串中数字(自定义函数)
  8. 幻灯片JavaScript特效展示
  9. 002输出一个正方形
  10. word制作多个单位联合发文的文件头
  11. Android APP - GPS定位并获取地理位置
  12. matlab读ascii的dat,[转载]MATLAB读取和调用各种数据(txt,dat,ma
  13. 怎么对BI报表展开测试?
  14. TM4C123G 硬件spi
  15. 所见即所得网页html编辑器,在线所见即所得HTML编辑器的实现原理浅析
  16. 原理+论文+实战:60篇由浅入深的时间序列预测/分类教程汇总
  17. 如何用python写傅里叶级数
  18. vue过滤器使用方法
  19. Elasticsearch:索引状态是红色还是黄色?为什么?
  20. w32tm 排错时间

热门文章

  1. 小米电视是鸿蒙系统吗,荣耀发布智慧屏将搭载鸿蒙系统 小米电视的江湖老大地位还能保得住吗...
  2. 色带通用型号表_Excel表中基于日期的色带
  3. URI是什么,在Android中有什么作用?
  4. 二叉树的深度python_求二叉树的深度 python
  5. 玩树梅派学linux-shell编程
  6. 上海航芯 | 指纹芯片及解决方案介绍
  7. android 下载时文件名是中文和空格会报错解决方案
  8. 涉密计算机存储数据恢复,涉密集成数据恢复咨询
  9. Vue项目中使用AntV X6绘制流程图
  10. (转)Exception in thread main java.util.ConcurrentModificationException异常怎么解决?