java通过key-list和对应value更新当前对象
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java通过key-list和对应value更新当前对象,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2368字,纯文字阅读大概需要4分钟。
内容图文
当前有一个复杂对象,类似json,现在要对当前对象进行更新(已有的key更新,未有的key插入)
// 递归更新一个json对象,原对象若没有则插入key,精妙! @SuppressWarnings("unchecked") Object setObjectRecursive(Object current, final List<String> paths, int index, final Object value) { // 如果是已经超出path,我们就返回value即可,作为最底层叶子节点boolean isLastIndex = index == paths.size(); if (isLastIndex) { return value; } String path = paths.get(index).trim(); boolean isNeedMap = isPathMap(path); if (isNeedMap) { Map<String, Object> mapping; // 当前不是map,因此全部替换为map,并返回新建的map对象boolean isCurrentMap = current instanceof Map; if (!isCurrentMap) { mapping = new HashMap<String, Object>(); mapping.put( path, buildObject(paths.subList(index + 1, paths.size()), value)); return mapping; } // 当前是map,但是没有对应的key,也就是我们需要新建对象插入该map,并返回该map mapping = ((Map<String, Object>) current); boolean hasSameKey = mapping.containsKey(path); if (!hasSameKey) { mapping.put(path,buildObject(paths.subList(index + 1, paths.size()), value)); return mapping; } // 当前是map,而且还竟然存在这个值,好吧,继续递归遍历 current = mapping.get(path); mapping.put(path, setObjectRecursive(current, paths, index + 1, value)); return mapping; } boolean isNeedList = isPathList(path); if (isNeedList) { List<Object> lists; int listIndexer = getIndex(path); // 当前是list,直接新建并返回即可boolean isCurrentList = current instanceof List; if (!isCurrentList) { lists = expand(new ArrayList<Object>(), listIndexer + 1); lists.set( listIndexer, buildObject(paths.subList(index + 1, paths.size()), value)); return lists; } // 当前是list,但是对应的indexer是没有具体的值,也就是我们新建对象然后插入到该list,并返回该List lists = (List<Object>) 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)); return lists; } // 当前是list,并且存在对应的index,没有办法继续递归寻找 current = lists.get(listIndexer); lists.set(listIndexer, setObjectRecursive(current, paths, index + 1, value)); return lists; } throw DataMException.asDataMException("该异常代表系统编程错误, 请联系DataX开发团队"); } //根据key的类型来选择获取value的方式privateboolean isPathMap(final String path) { return StringUtils.isNotBlank(path) && !isPathList(path); } privateboolean isPathList(final String path) { return path.contains("[") && path.contains("]"); }
原文:https://www.cnblogs.com/wangbin2188/p/14188511.html
内容总结
以上是互联网集市为您收集整理的java通过key-list和对应value更新当前对象全部内容,希望文章能够帮你解决java通过key-list和对应value更新当前对象所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。