假设我有一个整数映射的映射,我想要过滤第二个映射的键并组合给定键的数组。
所以基本上我想从
Map<String, Map<String, List<Integer>>>
至
List<Integer>
例如
KeyA -> keya -> [1,2,3]
KeyB -> keya -> [4,5,6]
KeyC -> keyb -> [7,8]
结果应该是如果过滤器值为 keya [1,2,3,4,5,6],我并不真正关心第一组键。
我在以标准迭代方式完成此操作时没有任何问题。
不过我想使用 Streams。
最佳答案
您的描述中有一些错误, map 中不能有两个名为 "keya"
的相同键。
但是,Stream API 的常见解决方案如下所示:
List<Integer> collect = source.values().stream()
.flatMap(s -> s.entrySet().stream())
.filter(s1 -> s1.getKey().equals(1) || s1.getKey().equals(2)) //needed key here
.map(Map.Entry::getValue)
.flatMap(Collection::stream)
.collect(Collectors.toList());
例如:
Map<String, Map<Integer, List<Integer>>> source = Map.of("keyA", Map.of(1, Arrays.asList(1,2,3,5)), "keyB", Map.of(2, Arrays.asList(5,6,7,8)));
输出:
[5、6、7、8、1、2、3、5]
关于java - 使用流 API 将数组的 HashMap 组合成数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69509587/