Java【代码分享 13】前端动态添加一条记后端使用JDK1.8实现map对象根据key的部分值进行分组(将map对象封装成指定entity对象)

简介: Java【代码分享 13】前端动态添加一条记后端使用JDK1.8实现map对象根据key的部分值进行分组(将map对象封装成指定entity对象)

why

我是后端开发工程师,前端的很多函数不是很了解,所以很多问题期望在后端进行处理。

前端

有这样一个实现,前端要动态添加记录,然后将记录统一存储在一个字段里,代码如下:

// 动态添加一行输入参数描写
function addParamIn() {
    // 输入参数列表
    var paramInList = $('#paramInList');
    // 添加一行
    var tr = $(['<tr>'
        , '<td ><input type="text" name="paramIn-' + data.paramInNum + '-name" placeholder = "输入字段英文名" value="" class="layui-input"></td>'
        , '<td ><input type="text" name="paramIn-' + data.paramInNum + '-cn" placeholder = "输入字段中文名" value="" class="layui-input"></td>'
        , '<td ><select name="paramIn-' + data.paramInNum + '-type" lay-verify="required"> <option value="date">时间</option><option value="varchar">字符串</option></select></td>'
        , '<td ><input type="text" name="paramIn-' + data.paramInNum + '-map" placeholder = "输入映射字段名" value="" class="layui-input"></td>'
        , '<td ><select name="paramIn-' + data.paramInNum + '-isRequired" lay-verify="required"> <option value="1">是</option><option value="0">否</option></select></td>'
        , '<td ><input type="text" name="paramIn-' + data.paramInNum + '-defaultVal" placeholder = "输入默认值" value="" class="layui-input"></td>'
        , '<td>'
        , '<button class="layui-btn layui-btn-xs layui-btn-danger specialConfig-delete">删除</button>'
        , '</td>'
        , '</tr>'].join(''));
    // 删除当前行
    tr.find('.specialConfig-delete').on('click', function () {
        tr.remove();
    });
    // 页面追加一行、输入参数个数加一
    paramInList.append(tr);
    // 重新渲染 下拉选
    form.render("select");
    data.paramInNum += 1;
}

可以看的出来,传输到后端后,输入参数是多个map对象,比如:

{
// 其他参数
"source":"sourceTableName",
"view":"全部展示",
"desc":"查询特殊时段的异常信息",
...
// 输入参数【主要要处理的】
// 第一行
"paramIn-0-name":"test_param",
"paramIn-0-cn":"测试参数",
"paramIn-0-type":"字符串",
"paramIn-0-map":"testParam",
"paramIn-0-isRequired":"1",
"paramIn-0-defaultVal":"测试成功",
// 第二行
"paramIn-1-name":"test_param2",
"paramIn-1-cn":"测试参数2",
"paramIn-1-type":"日期",
"paramIn-1-map":"testParam2",
"paramIn-1-isRequired":"0",
"paramIn-1-defaultVal":"测试失败",
// ... 还有很多行
// 动态的输出参数【跟输入参数一样,这里不再贴出】
}

后端处理

// 进行分组【这里过滤了输入参数paramIn 和输出参数 paramOut 进行分组处理】
// paramIn-000-name 分组key为 paramIn-000
Map<String, List<Map.Entry<String, Object>>> paramIn = mapParam.entrySet().stream().filter(map -> map.getKey().contains("paramIn")).collect(Collectors.groupingBy(map -> {
            String key = map.getKey();
            return key.substring(0, key.indexOf("-", 8));
        }));
// paramOut-000-name 分组key为 paramOut-000 
Map<String, List<Map.Entry<String, Object>>> paramOut = mapParam.entrySet().stream().filter(map -> map.getKey().contains("paramOut")).collect(Collectors.groupingBy(map -> {
            String key = map.getKey();
            return key.substring(0, key.indexOf("-", 9));
        }));
// 封装
ArrayList<SpecialConfigParaIn> paraInArrayList = new ArrayList<>();
paramIn.forEach((key, val) -> {
  // 这里实现了key值的处理,使其与entity的字段对应
  Map<String, Object> stringObjectMap = changeKeysToEntity(val, key);
  SpecialConfigParaIn specialConfigParaIn = JSON.parseObject(JSON.toJSONString(stringObjectMap), SpecialConfigParaIn.class);
            paraInArrayList.add(specialConfigParaIn);
        });
        specialConfig.setParamIn(JSON.toJSONString(paraInArrayList));
/**
* 处理所有key值
*
* @param mapList    需要处理所有key值的对象
* @param replaceStr 要替换的字符串
* @return Map<String, Object>
*/
private Map<String, Object> changeKeysToEntity(List<Map.Entry<String, Object>> mapList, String replaceStr) {
        Map<String, Object> returnMap = new HashMap<>(8);
        mapList.forEach(map -> {
            returnMap.put(map.getKey().replace(replaceStr, "").replace("-", ""), map.getValue());
        });
        return returnMap;
    }

总结

如果前端可以进行处理自然是最佳的,前端无法处理,在后端解决问题也不是不行。

目录
相关文章
|
3月前
|
Java 关系型数据库 MySQL
"解锁Java Web传奇之旅:从JDK1.8到Tomcat,再到MariaDB,一场跨越数据库的冒险安装盛宴,挑战你的技术极限!"
【8月更文挑战第19天】在Linux上搭建Java Web应用环境,需安装JDK 1.8、Tomcat及MariaDB。本指南详述了使用apt-get安装OpenJDK 1.8的方法,并验证其版本。接着下载与解压Tomcat至`/usr/local/`目录,并启动服务。最后,通过apt-get安装MariaDB,设置基本安全配置。完成这些步骤后,即可验证各组件的状态,为部署Java Web应用打下基础。
55 1
|
1天前
|
jenkins Java 测试技术
如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例详细说明
本文介绍了如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例,详细说明了从 Jenkins 安装配置到自动构建、测试和部署的全流程。文中还提供了一个 Jenkinsfile 示例,并分享了实践经验,强调了版本控制、自动化测试等关键点的重要性。
17 3
|
6天前
|
数据库 开发者
后端开发的哲学:代码与人生的交织
在数字化的时代,后端开发不仅仅是技术的堆砌,它更像是一场深刻的人生修炼。本文将探讨后端开发中蕴含的哲理,以及这些哲理如何影响我们的职业生涯和人生观。我们将从代码的本质出发,逐步深入到人生的意义,最终理解为何“你必须成为你希望在世界上看到的改变。”
|
28天前
|
机器学习/深度学习 PyTorch 算法框架/工具
揭秘深度学习中的微调难题:如何运用弹性权重巩固(EWC)策略巧妙应对灾难性遗忘,附带实战代码详解助你轻松掌握技巧
【10月更文挑战第1天】深度学习中,模型微调虽能提升性能,但常导致“灾难性遗忘”,即模型在新任务上训练后遗忘旧知识。本文介绍弹性权重巩固(EWC)方法,通过在损失函数中加入正则项来惩罚对重要参数的更改,从而缓解此问题。提供了一个基于PyTorch的实现示例,展示如何在训练过程中引入EWC损失,适用于终身学习和在线学习等场景。
42 4
揭秘深度学习中的微调难题:如何运用弹性权重巩固(EWC)策略巧妙应对灾难性遗忘,附带实战代码详解助你轻松掌握技巧
|
8天前
|
设计模式 Java API
[Java]静态代理与动态代理(基于JDK1.8)
本文介绍了代理模式及其分类,包括静态代理和动态代理。静态代理分为面向接口和面向继承两种形式,分别通过手动创建代理类实现;动态代理则利用反射技术,在运行时动态创建代理对象,分为JDK动态代理和Cglib动态代理。文中通过具体代码示例详细讲解了各种代理模式的实现方式和应用场景。
[Java]静态代理与动态代理(基于JDK1.8)
|
21天前
|
jenkins Java 测试技术
如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例详细说明
【10月更文挑战第8天】本文介绍了如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例,详细说明了从 Jenkins 安装配置到自动构建、测试和部署的全流程。文中还提供了一个 Jenkinsfile 示例,并分享了实践经验,强调了版本控制、自动化测试等关键点的重要性。
28 5
|
20天前
|
Java
让星星⭐月亮告诉你,jdk1.8 Java函数式编程示例:Lambda函数/方法引用/4种内建函数式接口(功能性-/消费型/供给型/断言型)
本示例展示了Java中函数式接口的使用,包括自定义和内置的函数式接口。通过方法引用,实现对字符串操作如转换大写、数值转换等,并演示了Function、Consumer、Supplier及Predicate四种主要内置函数式接口的应用。
20 1
|
30天前
|
前端开发 Java
学习SpringMVC,建立连接,请求,响应 SpringBoot初学,如何前后端交互(后端版)?最简单的能通过网址访问的后端服务器代码举例
文章介绍了如何使用SpringBoot创建简单的后端服务器来处理HTTP请求,包括建立连接、编写Controller处理请求,并返回响应给前端或网址。
50 0
学习SpringMVC,建立连接,请求,响应 SpringBoot初学,如何前后端交互(后端版)?最简单的能通过网址访问的后端服务器代码举例
|
14天前
|
存储 数据管理 API
零代码能力:轻松搞定表单和API接口,少写80%后端代码,内含资源
小白接口(果创云 YesApi.cn)是一个零代码和低代码开发平台,提供一站式后端云服务,帮助开发者、学生、业余爱好者、工作室、中小企业及无IT技术人员的传统企业快速搭建应用、接口、服务和网站。平台提供500+免费API接口,支持在线API开发、在线表单、数据库管理、图片文件存储、会员管理等功能,无需后端开发经验,轻松实现数据处理和应用开发。
|
2月前
|
SQL JSON Java
springboot 如何编写增删改查后端接口,小白极速入门,附完整代码
本文为Spring Boot增删改查接口的小白入门教程,介绍了项目的构建、配置YML文件、代码编写(包括实体类、Mapper接口、Mapper.xml、Service和Controller)以及使用Postman进行接口测试的方法。同时提供了SQL代码和完整代码的下载链接。
springboot 如何编写增删改查后端接口,小白极速入门,附完整代码