java - 使用流 API 将数组的 HashMap 组合成数组

标签 java collections java-8 java-stream

假设我有一个整数映射的映射,我想要过滤第二个映射的键并组合给定键的数组。

所以基本上我想从

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/

相关文章:

java - 猜测随机数游戏错误

java - 什么时候为 bean 调用 @Autowired?

asp.net-mvc - 使用相同的 Key 从 Request.Files 获取所有文件

java - 如何限制 Java 8 应用程序消耗的总内存?

java - 从流中的两个列表创建分离值的映射

java - CXF Web 服务服务器将请求凭证委托(delegate)给内部 Web 服务调用

java - Bean 命名 - Spring in Action 有错误吗?

wpf - 绑定(bind)到集合中的单个元素

c# - 检查两个集合中是否存在任何元素

java - min(Comparator) 是否等于 sorted(Comparator).findFirst()?