java - 映射几个流

标签 java java-stream

我有几个具有相同 key 的 map name和不同的值类型。

Map<String, Long> map1 = ...
Map<String, Long> map2 = ...
Map<String, String> map3 = ...

我想要实现的是,从这三个不同的 map 中,组成一个新的 map :
Map<String, Foo> fooMap = ...

其中 Foo 是一个类:
class Foo {
  long val1;
  long val2;
  String val3;
}

是否可以使用 Streams API 来做到这一点?

最佳答案

您可以 Stream在其中一个映射的条目上,并将每个条目映射到输出 Map 的一个条目:

Map<String,Foo>
   outMap = map1.entrySet()
                .stream()
                .map(e -> new SimpleEntry<>(e.getKey(),
                                            new Foo(e.getValue(),
                                                    map2.get(e.getKey()),
                                                    map3.get(e.getKey()))))
                .collect(Collectors.toMap(Map.Entry::getKey,Map.Entry::getValue));

这是假设您的 Foo类有一个 3 参数构造函数。

编辑:正如安东所评论的,您可以跳过 map步:
Map<String,Foo>
   outMap = map1.entrySet()
                .stream()
                .collect(Collectors.toMap(Map.Entry::getKey,
                                          e -> new Foo(e.getValue(),
                                                       map2.get(e.getKey()),
                                                       map3.get(e.getKey()))));

关于java - 映射几个流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61477090/

相关文章:

java - 使用 Java 8 流创建 Collection<Stream>

filter - Map 上的流和过滤操作

java - 如何限制 Activity 的 Spring WebClient 调用次数

java - 逐行读取文本文件并将对象存储在数组中

java - 将大 POJO 转换为案例类

java - 具有内部 ImmutableList 的映射的嵌套 groupingBy?

java - peek()和allMatch()如何在Java 8 Stream API中一起工作

java - 使用 Java Stream API 求减法总和

Java:JPanel 在 CardLayout 中无法正确显示

java - 在 JavaFX 中的 GridPane 的特定单元格上设置背景颜色