【发布时间】:2019-04-10 09:15:22
【问题描述】:
我有一个 ArrayList,其中包含数千个 HashMap,其中四个键和值映射到它们,如下所示:
HashMap<String, Object> map = new HashMap<>();
map.put("ID", 1);
map.put("NAME", name);
map.put("WORK_TIME", workTime);
map.put("ACCOUNT", name);
现在有了这些 HashMap 的 ArrayList,我想总结具有相同 ID、姓名和帐户的人的工作时间,例如:
HashMap<String, Object> map1 = new HashMap<>();
map1.put("ID", 1);
map1.put("NAME", "Edward");
map1.put("WORK_TIME", 20);
map1.put("ACCOUNT", null);
HashMap<String, Object> map2 = new HashMap<>();
map2.put("ID", 1);
map2.put("NAME", "Krzych");
map2.put("WORK_TIME", 6);
map2.put("ACCOUNT", 123);
HashMap<String, Object> map3 = new HashMap<>();
map3.put("ID", 1);
map3.put("NAME", "Edward");
map3.put("WORK_TIME", 13.5);
map3.put("ACCOUNT", null);
HashMap<String, Object> map4 = new HashMap<>();
map4.put("ID", 2);
map4.put("NAME", "Grzesiek");
map4.put("WORK_TIME", 50);
map4.put("ACCOUNT", null);
HashMap<String, Object> map5 = new HashMap<>();
map5.put("ID", 2);
map5.put("NAME", "Edward");
map5.put("WORK_TIME", 12);
map5.put("ACCOUNT", 123);
[..]
ArrayList<HashMap<String,Object>> arrList = new ArrayList<>();
arrList.put..
结果我应该得到一个包含 4 个 HashMap 的 ArrayList,其中只有两个具有相同 ID 和帐户的 Edward HashMap 合并为一个,工作时间为 33.5。
我想出的唯一方法是遍历所有地图,比较这三个值,然后成功替换存储在第二个数组列表中的哈希图中的工作时间值 我正在使用 Java 8,我想使用流来完成此任务,这可能吗?或者你有没有更好的解决方案?
【问题讨论】:
-
使用具体的类来执行这样的操作。例如
class Employee { int id; String name;int workTime;Integer account;}。此外,您可以收集这些toMap和name作为键并相应地合并值。 -
我同意所有给出的答案,但是,数据来自哪里?我的猜测是数据来自某种数据库,因此直接在数据库级别执行 GROUP BY 是明智的。
-
是的,你是对的,所有的数据都来自数据库。谢谢你的建议,我试试看。
标签: java hashmap java-stream