Java【前端动态添加一条记】【后端使用JDK1.8实现map对象根据key的部分值进行分组】(并将map对象封装成指定entity对象)
生活随笔
收集整理的這篇文章主要介紹了
Java【前端动态添加一条记】【后端使用JDK1.8实现map对象根据key的部分值进行分组】(并将map对象封装成指定entity对象)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
why
我是后端開(kāi)發(fā)工程師,前端的很多函數(shù)不是很了解,所以很多問(wèn)題期望在后端進(jìn)行處理。
前端
有這樣一個(gè)實(shí)現(xiàn),前端要?jiǎng)討B(tài)添加記錄,然后將記錄統(tǒng)一存儲(chǔ)在一個(gè)字段里,代碼如下:
// 動(dòng)態(tài)添加一行輸入?yún)?shù)描寫 function addParamIn() {// 輸入?yún)?shù)列表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">時(shí)間</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 = "輸入默認(rèn)值" value="" class="layui-input"></td>', '<td>', '<button class="layui-btn layui-btn-xs layui-btn-danger specialConfig-delete">刪除</button>', '</td>', '</tr>'].join(''));// 刪除當(dāng)前行tr.find('.specialConfig-delete').on('click', function () {tr.remove();});// 頁(yè)面追加一行、輸入?yún)?shù)個(gè)數(shù)加一paramInList.append(tr);// 重新渲染 下拉選form.render("select");data.paramInNum += 1; }可以看的出來(lái),傳輸?shù)胶蠖撕?#xff0c;輸入?yún)?shù)是多個(gè)map對(duì)象,比如:
{ // 其他參數(shù) "source":"sourceTableName", "view":"全部展示", "desc":"查詢特殊時(shí)段的異常信息", ...// 輸入?yún)?shù)【主要要處理的】 // 第一行 "paramIn-0-name":"test_param", "paramIn-0-cn":"測(cè)試參數(shù)", "paramIn-0-type":"字符串", "paramIn-0-map":"testParam", "paramIn-0-isRequired":"1", "paramIn-0-defaultVal":"測(cè)試成功",// 第二行 "paramIn-1-name":"test_param2", "paramIn-1-cn":"測(cè)試參數(shù)2", "paramIn-1-type":"日期", "paramIn-1-map":"testParam2", "paramIn-1-isRequired":"0", "paramIn-1-defaultVal":"測(cè)試失敗",// ... 還有很多行// 動(dòng)態(tài)的輸出參數(shù)【跟輸入?yún)?shù)一樣,這里不再貼出】 }后端處理
// 進(jìn)行分組【這里過(guò)濾了輸入?yún)?shù)paramIn 和輸出參數(shù) paramOut 進(jìn)行分組處理】 // 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) -> {// 這里實(shí)現(xiàn)了key值的處理,使其與entity的字段對(duì)應(yīng)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值的對(duì)象 * @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;}總結(jié)
如果前端可以進(jìn)行處理自然是最佳的,前端無(wú)法處理,在后端解決問(wèn)題也不是不行。
總結(jié)
以上是生活随笔為你收集整理的Java【前端动态添加一条记】【后端使用JDK1.8实现map对象根据key的部分值进行分组】(并将map对象封装成指定entity对象)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【Linux环境】Elasticsear
- 下一篇: Java后端学习路线6大维度详细总结(编