gpt4 book ai didi

java - 通过使用 stream() 压缩另一个映射来构建新的 HashMap

转载 作者:行者123 更新时间:2023-11-30 06:15:53 24 4
gpt4 key购买 nike

我需要新的HashMap<Integer, Set<Integer>>这是{10: [100,101], 20:[200,201]}来自 {100: [100], 101: [101], 200:[200], 201:[201]}使用流()

我尝试了下面的代码,但当然行不通。

HashMap<Integer, Set<Integer>> map1 = new HashMap<>();
map1.put(100, new HashSet(Arrays.asList(100));
...
HashMap<Integer, Set<Integer>> map2 = map1.entrySet().stream().collect(
Collectors.toMap(entry -> ((Entry<Integer, Set<Integer>>) entry).getKey()/10,
entry -> ((Entry<Integer, Set<Integer>>) entry).getValue()));

这引发了 java.lang.IllegalStateException: Duplicate key .

最佳答案

你应该试试Collectors.groupingBy :

map2 = map1.entrySet()
.stream()
.collect (Collectors.groupingBy (
entry -> entry.getKey()/10,
Collectors.mapping(entry -> entry.getValue(),Collectors.toSet()));

我不确定输入 map 的类型是什么。如果是 HashMap<Integer,Integer> ,我的代码应该按原样工作。如果是 HashMap<Integer, Set<Integer>> Set<Integer>在哪里仅包含一个整数(如您的示例所示),您可以更改 entry.getValue()entry.getValue().iterator().next()得到那个单一的整数。

map2 = map1.entrySet()
.stream()
.collect (Collectors.groupingBy (
entry -> entry.getKey()/10,
Collectors.mapping(entry -> entry.getValue().iterator().next(),Collectors.toSet()));

想一想,如果您的输入 Map 始终为每个键包含一个值,该值是一个 Set 且具有等于该键的单个整数,您可以忽略该值:

map2 = map1.entrySet()
.stream()
.collect (Collectors.groupingBy (
entry -> entry.getKey()/10,
Collectors.mapping(entry -> entry.getKey(),Collectors.toSet()));

关于java - 通过使用 stream() 压缩另一个映射来构建新的 HashMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28228445/

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