Java【前端动态添加一条记】【后端使用JDK1.8实现map对象根据key的部分值进行分组】(并将map对象封装成指定entity对象)
生活随笔
收集整理的這篇文章主要介紹了
Java【前端动态添加一条记】【后端使用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;}總結
如果前端可以進行處理自然是最佳的,前端無法處理,在后端解決問題也不是不行。
總結
以上是生活随笔為你收集整理的Java【前端动态添加一条记】【后端使用JDK1.8实现map对象根据key的部分值进行分组】(并将map对象封装成指定entity对象)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Linux环境】Elasticsear
- 下一篇: Java后端学习路线6大维度详细总结(编