我的数据是这样的:
List<Map<String, String>> = // psuedocode
[
{
"ID": "a",
"Value": "val1"
},
{
"ID": "b",
"Value": "val2"
},
]
我想将其转为
Map<String, String> = // more pseudocode
{
"a": "val1",
"b": "val2"
}
到目前为止我有这样的事情:
Map<String, String> output = myList.stream()
.flatMap(m -> m.entrySet().stream())
.collect(Collectors.toMap())
有人可以指导我吗?另一种方法是使用常规for循环,但我正在尝试使用lambdas。
答案 0 :(得分:5)
您需要将列表中的每个Map
实例映射到键和值,然后收集到单个Map
实例中。
Map<String, String> output = myList.stream()
.collect(Collectors.toMap(m -> m.get("ID"), m -> m.get("Value")));
如果&#34; ID&#34;这将引发异常。是重复的。有重载方法可以让您更好地控制此行为。
答案 1 :(得分:0)
虽然上面的解决方案很棒,但我得到的结果如下:
//declared a result map
Map<String, String> result = new ConcurrentHashMap<String, String>();
list.parallelStream().forEach( m -> result.put(m.get("id"), m.get("value")));
在并发处理情况下,您可以安全。