一对多的重复比如说一个老师有好几个学生,这时候查询出来是一个老师一个学生列出来,明显是有重复的,怎么办呢?需要用map方法过滤
private List<Admin> classfiy(List<Admin> admins) { if (admins != null && admins.size() > 0) { Map<String, Admin> map = new HashMap<String, Admin>(); for (Admin admin : admins) { if (map.containsKey(admin.getAccount())) { map.get(admin.getAccount()).getRoles().addAll( admin.getRoles()); map.get(admin.getAccount()).getProducts().addAll((admin.getProducts())); } else { map.put(admin.getAccount(), admin); } } List<Admin> list = new ArrayList<Admin>(); for (Iterator<String> i = map.keySet().iterator(); i.hasNext();) { String key = i.next(); list.add(map.get(key)); } Collections.sort(list, new Comparator() { @Override public int compare(Object o1, Object o2) { Admin ad1 = (Admin) o1; Admin ad2 = (Admin) o2; return ad2.getUpdateTime().compareTo(ad1.getUpdateTime()); } }); return list; } return null; }
过滤之后也许查询出的学生数据有重复,可以先清除重复学生数据
if (products != null && products.size() > 0) { for(int i = products.size() - 1; i > 0; i--) { String item = products.get(i).getName(); for(int j = i - 1; j >= 0; j--) { if(products.get(j).getName().equals(item)) { products.remove(i); break; } } } }
然后用分隔符分开
if (roles != null && roles.size() > 0) { for (int i = 0; i < roles.size(); i++) { JSONObject jr = new JSONObject(); jr.put("id", roles.get(i).getId()); jr.put("name", roles.get(i).getName()); jr.put("desc", roles.get(i).getDesc()); sb.append(roles.get(i).getName()); if (i < roles.size() - 1) sb.append(","); rs.add(jr); } }
最后返回json数据
private String createJsonStr(List<Admin> rows) { JSONObject json = new JSONObject(); if (null != rows) { JSONArray jows = new JSONArray(); for (Admin row : rows) { JSONObject r = buildJson(row); jows.add(r); } json.put("rows", jows); } else { json.put("rows", new JSONArray()); } return json.toString(); }
大概思路就是如此。。。