日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

java 更新对象_java通过key-list和对应value更新当前对象

發(fā)布時(shí)間:2024/9/3 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 更新对象_java通过key-list和对应value更新当前对象 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

//遞歸更新一個(gè)json對(duì)象,原對(duì)象若沒(méi)有則插入key,精妙!

@SuppressWarnings("unchecked")

Object setObjectRecursive(Object current,final Listpaths,int index, finalObject value) {//如果是已經(jīng)超出path,我們就返回value即可,作為最底層葉子節(jié)點(diǎn)

boolean isLastIndex = index ==paths.size();if(isLastIndex) {returnvalue;

}

String path=paths.get(index).trim();boolean isNeedMap =isPathMap(path);if(isNeedMap) {

Mapmapping;//當(dāng)前不是map,因此全部替換為map,并返回新建的map對(duì)象

boolean isCurrentMap = current instanceofMap;if (!isCurrentMap) {

mapping= new HashMap();

mapping.put(

path,

buildObject(paths.subList(index+ 1, paths.size()),

value));returnmapping;

}//當(dāng)前是map,但是沒(méi)有對(duì)應(yīng)的key,也就是我們需要新建對(duì)象插入該map,并返回該map

mapping = ((Map) current);boolean hasSameKey =mapping.containsKey(path);if (!hasSameKey) {

mapping.put(path,buildObject(paths.subList(index+ 1, paths.size()),

value));returnmapping;

}//當(dāng)前是map,而且還竟然存在這個(gè)值,好吧,繼續(xù)遞歸遍歷

current =mapping.get(path);

mapping.put(path, setObjectRecursive(current, paths, index+ 1, value));returnmapping;

}boolean isNeedList =isPathList(path);if(isNeedList) {

Listlists;int listIndexer =getIndex(path);//當(dāng)前是list,直接新建并返回即可

boolean isCurrentList = current instanceofList;if (!isCurrentList) {

lists= expand(new ArrayList(), listIndexer + 1);

lists.set(

listIndexer,

buildObject(paths.subList(index+ 1, paths.size()),

value));returnlists;

}//當(dāng)前是list,但是對(duì)應(yīng)的indexer是沒(méi)有具體的值,也就是我們新建對(duì)象然后插入到該list,并返回該List

lists = (List) current;

lists= expand(lists, listIndexer + 1);boolean hasSameIndex = lists.get(listIndexer) != null;if (!hasSameIndex) {

lists.set(

listIndexer,

buildObject(paths.subList(index+ 1, paths.size()),

value));returnlists;

}//當(dāng)前是list,并且存在對(duì)應(yīng)的index,沒(méi)有辦法繼續(xù)遞歸尋找

current =lists.get(listIndexer);

lists.set(listIndexer,

setObjectRecursive(current, paths, index+ 1, value));returnlists;

}throw DataMException.asDataMException("該異常代表系統(tǒng)編程錯(cuò)誤, 請(qǐng)聯(lián)系DataX開(kāi)發(fā)團(tuán)隊(duì)");

}//根據(jù)key的類型來(lái)選擇獲取value的方式

private boolean isPathMap(finalString path) {return StringUtils.isNotBlank(path) && !isPathList(path);

}private boolean isPathList(finalString path) {return path.contains("[") && path.contains("]");

}

總結(jié)

以上是生活随笔為你收集整理的java 更新对象_java通过key-list和对应value更新当前对象的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。