java根据第一列的值将表转换为列表<Map<String,String>>
编辑:我现在只限于Java8
我有一个表,它总是有3列:id | key | value
我可以很容易地将这个表设置为List<List<String>>
格式(每一行都是字符串列表)或List<String>
格式(列表中的所有表值)。
但我的实际目标是List<Map<String,String>>
(或Map<String, Map<String, String>>
参见示例),其中映射包含表的键值对,每个列表包含表的相同给定id的所有键值对
例如下表
| ID | KEY | VALUE |
|---- |----- |------- |
| 1 | A | X |
| 1 | B | Y |
| 2 | C | Z |
| 3 | D | BLA |
应该变成
{
((A=X),(B=Y)),
((C=Z)),
((D=BLA)),
}
ID列仅用于分组
ID可以是从数字到字母数字的任何内容
我想出了一些有效的方法,但它很丑陋,也许有一种方法可以做得更好,更可读,也许可以使用流
List<List<String>> myTable = something;
Map<String, Map<String, String>> outerMap = new HashMap<>();
Map<String, String> innerMap = new HashMap<>();
for (List<String> s: myTable ) {
if (!outerMap.containsKey(s.get(0))) {
innerMap.clear();
}
innerMap.put(s.get(1), s.get(2));
outerMap.put(s.get(0), new HashMap<>(innerMap));
}
请注意,我创建HashMap时经常使用outerMap的方式
# 1 楼答案
通过像这样使用流API::forEach
来自JDK-9+
# 2 楼答案
这不像使用流那样优雅,但可能更容易理解:
# 3 楼答案
您可以使用流API来实现这一点
首先
groupingBy
ID用于外部映射,然后toMap
by KEY VALUE用于内部映射并获取外部映射的唯一值