java - 使用 Java 8 在列表中交换嵌套映射的键
问题描述
我有一个有结构的对象
List<Map<String(k1), Map<String(k2), String(v2)>>>
我需要将上面的列表转换为
List<Map<String(k2), Map<String(k1), String(v2)>>>
我被困在如何使用类似的构造获取嵌套地图
serviceResults.stream().map((k, v) -> ????)
这将允许我交换密钥。是否可以在不使用 Java 8 流的循环的情况下做到这一点?
附加信息 这是使用循环构造的代码
List<Map<String, Map<String, String>>> serviceResults = new ArrayList<>();
//Populate the above list
Map<String, Map<String, String>> swpMapOuter = new HashMap<>();
Map<String, String> swpMapInner = new HashMap<>();
for (Map<String, Map<String, String>> stringMapMap : serviceResults) {
for (Map.Entry<String, Map<String, String>> s : stringMapMap.entrySet()) {
String key1 = s.getKey();
Map<String, String> value1 = s.getValue();
for (Map.Entry<String, String> s1 : value1.entrySet()) {
String key2 = s1.getKey();
String value2 = s1.getValue();
swpMapInner.put(key1, value2);
swpMapOuter.put(key2, swpMapInner);
}
}
}
System.out.println("swpMapOuter " + swpMapOuter);
下面是 forEach 的代码,而不是 for 循环,但想知道是否可以使用 Stream 构造来实现
Map<String, Map<String, String>> swpMapOuter2 = new HashMap<>();
Map<String, String> swpMapInner2 = new HashMap<>();
serviceResults.forEach((stringMapMap) -> {
stringMapMap.entrySet().forEach((s) -> {
String key1 = s.getKey();
Map<String, String> value1 = s.getValue();
value1.entrySet().forEach((s1) -> {
String key2 = s1.getKey();
String value2 = s1.getValue();
swpMapInner2.put(key1, value2);
swpMapOuter2.put(key2, swpMapInner2);
});
});
});
System.out.println("swpMapOuter2 " + swpMapOuter2);
解决方案
推荐阅读
- django - 在 Django 中为模型字段生成随机字符串
- csv - 使用 ; 在文件中进行 ansible 查找 基于 2 个变量分隔
- c++ - C++ - 我想将来自字符串向量指针的数据组合成以下格式的静态字符串向量
- mysql - 远程运行存储过程时,MySQL 抛出“拒绝用户执行命令”
- azure - Azure 资源 WebApp 已部署,但无法从 url 访问
- c# - 定位报告项目,没有与顶部的硬编码距离
- azure - Is there a way to setup a Snowpipe on multiple Azure Storage Accounts?
- python - 程序周二不工作,但周日工作
- terraform - 有没有办法按最旧而不是最新对 aws_ami 进行排序?
- solver - “选择要执行的作业……”字面上永远运行