前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。
[ {"data" : {"code" : "044","post" : "xxx领导", "email" : "swfdffg@qq.com","Gender" : "boy"},"id" : "D279B324324343242342342428","userId" : "AF1111111111111111C93", "status" : "GOOD"
}, {"data" : {"code" : "043","post" : "员工", "email" : "jiangn@qq.com","Gender" : "girl"},"id" : "11914546565656757676D4D71D","userId" : "AF1111111111111111C93", "status" : "BAD" ... ...
}]
如上有一个类似这样 json :JsonContext,主要是描述多个 user 的相关信息。
业务:把 A 系统中的用户信息同步到 B 系统中,当多条 user 信息的 userId 相同时视为同一个 user,同步时只取其中职位最高的那一条数据。
思路:在同步前就过滤掉同一个 user 职位低的数据信息。
方法:
JSONArray jsonArray = JSON.parseArray(JsonContext);// 剔除JsonContext中重复的用户信息,只保留一个职位最高的userMap userMap = new HashMap();for (int i=0;i<jsonArray.size();i++) {Object user = jsonArray.getJSONObject(i);Map jsonMap = JSON.parseObject(String.valueOf(user));Object userId = jsonMap.get("userId");if (null != userMap.get(userId)) { // user已存在Map oldUser = JSON.parseObject(String.valueOf(userMap.get(userId))); // 已存在用户Map oldDataMap = JSON.parseObject(String.valueOf(oldUser.get("data")));int oldLevel = getJobLevel(oldDataMap.get("post").toString());// 已存在用户职位等级int level = getJobLevel(JSON.parseObject(String.valueOf(jsonMap.get("data"))).get("post").toString());// 当前用户职位等级if(oldLevel <= level){ // 删除数值大者(职位等级低),保留等级高的职位logger.info("\n-----------------------------------保留的是:"+userMap.get(userId));logger.info("\n-----------------------------------删除的是:"+user);jsonArray.remove(user);i--;}else {logger.info("\n-----------------------------------删除的是:"+userMap.get(userId));logger.info("\n-----------------------------------保留的是:"+user);jsonArray.remove(jsonArray.getJSONObject(Integer.parseInt(userMap.get(userId+"i").toString())));i--;}} else {userMap.put(userId, user);userMap.put(userId+"i", i);}}这
这样循环后数据就没有重复的了,可以直接解析并作后续操作了。