java - Java8:操作地图的有效方法
问题描述
我有两个映射定义映射如下共享,基于 map1 中一个键的存在,我需要将条目复制到另一个映射。下面的代码可以根据需要工作,但有没有更好更简单的方法来实现同样的效果。感谢您的建议。
Map<Object, HashSet<Map<Object, String>>> map1 = new HashMap<>();
Map<Object, HashSet<Map<Object, String>>> map2 = new HashMap<>();
map1.entrySet().stream().forEach(e -> {
Set<Map<Object, String>> infoMapSet = e.getValue();
infoMapSet.forEach(
inMap -> {
if (inMap.containsKey("isMerge")) {
Set<Map<Object, String>> set = new HashSet<>();
set.add(inMap);
map2.put(e.getKey(), set);
}
});
});
解决方案
Map.forEach
您可以使用and来提高代码的可读性和表达性Map.computeIfAbsent
:
Map<Object, Set<Map<Object, String>>> map2 = new LinkedHashMap<>();
map1.forEach((key, setInfo) ->
setInfo.forEach(inMap -> {
if (inMap.containsKey("isMerge"))
map2.computeIfAbsent(key, k -> new LinkedHashSet<>()).add(inMap);
}));
注意:我使用LinekdHashMap
andLinkedHashSet
来保留插入顺序。
推荐阅读
- docker - 如何在多容器 Heroku 应用程序中的容器之间进行通信
- vue.js - 使用 v-model 生成输入标签
- reactjs - 导入 keras-js 会破坏相关功能和组件的单元测试
- python - 如何使用纵向动力学模型更新车辆的状态变量?
- php - 解析错误:语法错误,文件意外结束,预期变量
- python - 如何解析多个 n 大小数组中的单个 csv 文件列?
- c# - 如何使用获取;放; 使用 LINQ
- java - 如何将 Spring-boot 服务注入 aspectj 类?
- nuget - 一次更新 nuget 包及其所有依赖项
- amazon-web-services - 使用 AWS Amplify 注册后添加多因素身份验证?