Java 8 列表到现有 map

标签 java dictionary lambda java-8 hashmap

我有一张 map Map<Id,Map<Obj1,Obj2>> existingMap and List<Obj1> list ; 我需要将列表值添加到映射作为键和新映射作为值。

我尝试做类似的事情:

existingMap.putAll(list.stream().map(x->x.getId()).collect(
Collectors.toMap(x, x -> Map<Obj1,Obj2>::new);

应该怎么写?以及如何使用参数化构造函数来对抗默认值?

最佳答案

尝试:

list.forEach(e -> existingMap.put(e.getId(), new HashMap<>()));

仍然使用 Java 8 的功能特性,效果相同。

for - 等效循环:

for(Id id : list)
    existingMap.put(id.getId(), new HashMap<>());

你的代码有问题:

  • Map 是一个接口(interface),不能实例化。例如,使用 HashMapTreeMap 等具体实现。

  • Collectors#toMap 接受两个 Function。如果你想使用你的格式,你需要:

    Collectors.toMap(x -> x, HashMap::new)   
    

    注意 lambda x -> x 而不是简单的 x

    编辑:当然,您可以使用更冗长的 Function.identity(),而不是 x -> x,但是这取决于您的需要 < em>可能更具表现力。

关于Java 8 列表到现有 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42937373/

相关文章:

java - 简化 Java 流中的 Lambda 表达式

java - 蓝牙 InputStream.read() 不会永远返回数据和 block

java - 无法在 Android WebView 中设置 HttpURLConnection header

java - 通过 id wicket 查找 html 标记标签

c# - 在扩展方法中保存状态

python - 从包含列表的元组列表中进行字典理解

Java Serializable 和 lambda 表达式

java - 在 Spring Context 中实例化的 JsonIdentityInfo Resolver

java - 从 groovy 中的嵌套映射返回一维映射

python - 这个 lambda 函数有什么问题? Pandas 和 Python 数据框