使用Java8Lambda将列表映射转换为不同的映射

使用Java8Lambda将列表映射转换为不同的映射,java,lambda,java-8,Java,Lambda,Java 8,我有如下数据: List<Map<String, String>> = // psuedocode [ { "ID": "a", "Value": "val1" }, { "ID": "b", "Value": "val2" }, ] List=//psuedocode [ { “ID”:“a”, “值”:“值1” }, { “ID”:“b”, “值”:“val2” }, ] 我想把这个转到 Map<String, String>

我有如下数据:

List<Map<String, String>> = // psuedocode
[
 {
  "ID": "a",
  "Value": "val1"
 },
 {
  "ID": "b",
  "Value": "val2"
 },
]
List=//psuedocode
[
{
“ID”:“a”,
“值”:“值1”
},
{
“ID”:“b”,
“值”:“val2”
},
]
我想把这个转到

Map<String, String> = // more pseudocode
{
 "a": "val1",
 "b": "val2"
}
Map=//更多伪代码
{
“a”:“val1”,
“b”:“val2”
}
到目前为止,我有这样的想法:

    Map<String, String> output = myList.stream()
            .flatMap(m -> m.entrySet().stream())
            .collect(Collectors.toMap())
Map output=myList.stream()
.flatMap(m->m.entrySet().stream())
.collect(收集器.toMap())

有人能指引我吗?另一种方法是使用正则for循环,但我尝试使用lambdas。

您需要将列表中的每个
map
实例映射到一个键和一个值,然后收集到单个
map
实例中

Map<String, String> output = myList.stream()
  .collect(Collectors.toMap(m -> m.get("ID"), m -> m.get("Value")));
Map output=myList.stream()
.collect(Collectors.toMap(m->m.get(“ID”)、m->m.get(“Value”));

如果“ID”重复,这将引发异常。有一些重载方法可以让您更好地控制这种行为。

您需要将列表中的每个
map
实例映射到一个键和一个值,然后收集到单个
map
实例中

Map<String, String> output = myList.stream()
  .collect(Collectors.toMap(m -> m.get("ID"), m -> m.get("Value")));
Map output=myList.stream()
.collect(Collectors.toMap(m->m.get(“ID”)、m->m.get(“Value”));

如果“ID”重复,这将引发异常。有一些重载方法可以让您更好地控制这种行为。

虽然上述解决方案很好,但我得到的结果如下:

//declared a result map
Map<String, String> result = new ConcurrentHashMap<String, String>();

list.parallelStream().forEach( m -> result.put(m.get("id"), m.get("value")));
//声明了一个结果映射
映射结果=新的ConcurrentHashMap();
list.parallelStream().forEach(m->result.put(m.get(“id”)、m.get(“value”));

在并发处理的情况下,您可能是安全的。

虽然上述解决方案很好,但我得到的结果如下:

//declared a result map
Map<String, String> result = new ConcurrentHashMap<String, String>();

list.parallelStream().forEach( m -> result.put(m.get("id"), m.get("value")));
//声明了一个结果映射
映射结果=新的ConcurrentHashMap();
list.parallelStream().forEach(m->result.put(m.get(“id”)、m.get(“value”));

在并发处理的情况下,您可能是安全的。

如果您能想出一个解决方案,而不是伪代码,那将是很有帮助的。这将使其他人不再需要重复创建一个小测试。到目前为止,您的代码没有引用“ID”或“Value”,这一事实有些令人惊讶。。。听起来您应该将每个
Map
映射到一个键值对中,基本上是…而不是伪代码,如果您能够找到一个。这将使其他人不再需要重复创建一个小测试。到目前为止,您的代码没有引用“ID”或“Value”,这一事实有些令人惊讶。。。听起来您应该将每个
Map
映射为一个键值对,基本上。。。