Java实现List按条件分成多个子List

爱被打了一巴掌 2023-01-22 02:48 12阅读 0赞

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyMTA5NzQ2_size_16_color_FFFFFF_t_70

一、业务场景

相信很多开发的小伙伴都有遇到过需要对表按特定条件进行查询,然后再进行归类,比如:对员工表进行检索,然后分别按他们所在的部门进行归类,一般的做法都是按部门唯一标识(比如部门编号、部门名称等)进行一次一次查询,这样做的缺点显而易见,会造成与数据库的多次连接,从而影响效率和性能。而我的做法是直接对员工表进行一次全部读取,然后在本地根据条件再进行归类,这就涉及到需要对List进行处理,将父List直接拆分成多个子List。当然,上面举的例子只是最简单的业务场景,实际场景可能错综复杂,但

二、Java实现

话不多说,直接上代码。当然,上面举的例子只是最简单的业务场景,实际场景可能错综复杂,但我下面提供参考的这段代码已经够用了。

  1. import java.util.ArrayList;
  2. import java.util.HashMap;
  3. import java.util.HashSet;
  4. import java.util.Iterator;
  5. import java.util.List;
  6. import java.util.Map;
  7. import java.util.Set;
  8. public class DealList {
  9. /**
  10. * 按照List<Map<String,Object>>里面map的某个value重新封装成多个不同的list, 原始数据类型List<Map
  11. * <String,Object>>, 转换后数据类型Map<String,List<Map<String,Object>>>
  12. *
  13. * @param list
  14. * @param oneMapKey
  15. * @return
  16. */
  17. private static List<Map<String, Object>> change(List<Map<String, Object>> inList, String oneMapKey,
  18. List<Map<String, Object>> outList) {
  19. // 1.将某个key的值存在set中
  20. Set<Object> setTmp = new HashSet<Object>();
  21. for (Map<String, Object> tmp : inList) {
  22. setTmp.add(tmp.get(oneMapKey));
  23. }
  24. // 2.遍历set
  25. Iterator<Object> it = setTmp.iterator();
  26. while (it.hasNext()) {
  27. String oneMapValueStr = "";
  28. String oneSetTmpStr = (String) it.next();
  29. Map<String, Object> oneSetTmpMap = new HashMap<String, Object>();
  30. List<Map<String, Object>> oneSetTmpList = new ArrayList<Map<String, Object>>();
  31. for (Map<String, Object> tmp : inList) {
  32. oneMapValueStr = (String) tmp.get(oneMapKey);
  33. if (oneSetTmpStr.equals(oneMapValueStr)) {
  34. oneSetTmpMap.put("text", oneSetTmpStr);
  35. oneSetTmpList.add(tmp);
  36. }
  37. }
  38. oneSetTmpMap.put("array", oneSetTmpList);
  39. outList.add(oneSetTmpMap);
  40. }
  41. return outList;
  42. }
  43. public static void main(String[] args) {
  44. Map<String, Object> map1 = new HashMap<String, Object>();
  45. Map<String, Object> map2 = new HashMap<String, Object>();
  46. Map<String, Object> map3 = new HashMap<String, Object>();
  47. Map<String, Object> map4 = new HashMap<String, Object>();
  48. List<Map<String, Object>> inList = new ArrayList<Map<String, Object>>();
  49. map1.put("dept", "开发部");
  50. map1.put("name", "张三");
  51. map2.put("dept", "业务部");
  52. map2.put("name", "李华");
  53. map3.put("dept", "开发部");
  54. map3.put("name", "李四");
  55. map4.put("dept", "业务部");
  56. map4.put("name", "王明");
  57. inList.add(map1);
  58. inList.add(map2);
  59. inList.add(map3);
  60. inList.add(map4);
  61. System.out.println("原始的List:" + inList);
  62. List<Map<String, Object>> outList = new ArrayList<Map<String, Object>>();
  63. outList = change(inList, "dept", outList);
  64. System.out.println("处理后的List:" + outList);
  65. }
  66. }

结果:

原始的List:[{name=张三, dept=开发部}, {name=李华, dept=业务部}, {name=李四, dept=开发部}, {name=王明, dept=业务部}]
处理后的List:[{array=[{name=张三, dept=开发部}, {name=李四, dept=开发部}], text=开发部}, {array=[{name=李华, dept=业务部}, {name=王明, dept=业务部}], text=业务部}]

发表评论

表情:
评论列表 (有 0 条评论,12人围观)

还没有评论,来说两句吧...

相关阅读