gpt4 book ai didi

java - 将部分hashmap重复项合并到java中的新arraylist

转载 作者:行者123 更新时间:2023-11-30 07:41:38 26 4
gpt4 key购买 nike

我有 Stream<Map<String, String>>其中每个映射就像一个单独的记录并包含两个条目:

  1. 汽车 ID(“ID”、“1003”)
  2. 公里(“KMI”、“500”)

此列表可能包含重复的 map ,即 2 个或更多 map 可能具有相同的汽车 ID 条目值。基本上是这样的:entry1.get("ID") == entry2.get("ID")。我想要做的是删除具有重复 ID 的 map ,然后将 KMI 值合并在一起。这个:

{"ID":"1003","KMI":"500"}, {"ID":"1003","KMI":"400"}, {"ID":"1004","KMI":"200"}

应该变成这样:

{"ID":"1003","KMI":"900"}, {"ID":"1004","KMI":"200"}

我曾尝试单独使用流 API 来完成它,但我无法解决这个问题。我尝试修改一个类似的例子,它有对象列表这是我到目前为止得到的:

List<Map<String, String>> result = new ArrayList<>(
queryKmAll.collect(
Collectors.toMap(a1 -> a1.get("ID")), Function.identity(), (Map<String, String> m2, Map<String, String> m1) -> {
m1.put("KMI", String.valueOf(Double.parseDouble(m1.get("KMI")) + Double.parseDouble(m2.get("KMI"))));

return m1;
})
)
);

最佳答案

我已经从 OP 离开的地方接了起来。我已经稍微修改了您的逻辑以返回您想要的内容。看看它。希望对你有帮助

Collectors.toMap 将返回一个包含 ID 的 map 作为键和 sum of KMI对于 Function.identity()个案。所以返回将是Map<Object,Map<String,String>> .因为预期输出是 Stream<Map<String,String> , 我添加了 .values().stream() .

Stream<Map<String, String>> result = queryKmAll.collect(Collectors.toMap(a1 -> a1.get("ID"),
Function.identity(), (Map<String, String> m2, Map<String, String> m1) -> {
m1.put("KMI",
String.valueOf(Double.parseDouble(m1.get("KMI")) + Double.parseDouble(m2.get("KMI"))));

return m1;
})).values().stream();

result.forEach(System.out::println);

关于java - 将部分hashmap重复项合并到java中的新arraylist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55861974/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com