使用Java 8 lambda将列表映射转换为不同的Map

Bee*_*nny 0 java lambda java-8

我有这样的数据:

List<Map<String, String>> = // psuedocode
[
 {
  "ID": "a",
  "Value": "val1"
 },
 {
  "ID": "b",
  "Value": "val2"
 },
]
Run Code Online (Sandbox Code Playgroud)

我想把它变成

Map<String, String> = // more pseudocode
{
 "a": "val1",
 "b": "val2"
}
Run Code Online (Sandbox Code Playgroud)

到目前为止我有这样的事情:

    Map<String, String> output = myList.stream()
            .flatMap(m -> m.entrySet().stream())
            .collect(Collectors.toMap())
Run Code Online (Sandbox Code Playgroud)

有人可以指导我吗?另一种方法是使用常规for循环,但我正在尝试使用lambdas.

eri*_*son 5

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

Map<String, String> output = myList.stream()
  .collect(Collectors.toMap(m -> m.get("ID"), m -> m.get("Value")));
Run Code Online (Sandbox Code Playgroud)

如果重复"ID",这将抛出异常.有重载方法可以让您更好地控制此行为.