lambda - 在 Java 8 中将不同类型映射合并为一个

标签 lambda java-8 java-stream

有两张 map

  • <Integer,String> map1这是 <ID,Question>
  • <Integer,String> map2这是 <ID,Answer>

我想将它们合并到一张 map 中<String,String> resultMap这是 <Question,Answer>这样,该映射中的键是来自map1(问题)的值,而resultMap中的值是来自map2(答案)的值,并且这是基于相同的ID。

我可以在 java 6 中轻松完成此操作,如下面的代码所示。

for(Map.Entry<Integer,String> entry:map1.entrySet()){
    qaMap.put(entry.getValue(),map2.get(entry.getKey()));
}

但我想使用流和 lambda 在 Java 8 中编写此代码。如何做到这一点?

最佳答案

假设您的 key (ID)在两个 map 中都是相同的,我们可以做类似的事情

Map<String,String> map = map1.keySet().stream()
    .collect(Collectors.toMap(map1::get, map2::get));
  • 在上面的语句中,map1.keySet().stream()将为您提供 ID 流。
  • 然后 collect(Collectors.toMap(map1::get, map2::get) 将从 ID 流中创建一个 Map,其键为 map1.get(id) code> (即您的问题)和每个 id 的 map2.get(id) 值(即您的答案)。

关于lambda - 在 Java 8 中将不同类型映射合并为一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44815994/

相关文章:

java - 执行流操作 java 8 时正在更新集合

java - Java 8 Stream API 中的多个聚合函数

c++ - 获取对 lambda 捕获值的引用

c# - 所有数组槽都包含最后一个结果

java - 传递 Supplier<Stream<T>> 参数时 Stream.generate 方法的行为

java8 将 Map<X,Y> + Map<Y,Z> 转换为 Map<X,Z>

sql - 使用 Linq to SQL 在 SQL 2008 中仅搜索日期的时间部分

python - 在运行时创建一个 python 函数来匹配可变数量的字典条目

java - 为什么 Instant 不支持 ChronoUnit.YEARS 的操作?

java - 使用 "id"字段更新列表的子部分