Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用stream将字符串列表转换为具有自定义键的映射列表_Java_Lambda_Java Stream - Fatal编程技术网

Java 使用stream将字符串列表转换为具有自定义键的映射列表

Java 使用stream将字符串列表转换为具有自定义键的映射列表,java,lambda,java-stream,Java,Lambda,Java Stream,给定如下字符串列表: "Y:Yes", "N:No", "A:Apple" 我有点像 Map updated = values.stream().map(v -> v.split(":")).collect(Collectors.toMap(v1 -> v1[0],v1->v1.length>1?v1[1]:v1[0])); 但这给了我一张地图: { "Y":"Yes", "N":"No", "A":"Apple" } 我如何获得地图列表,例如: [ { nam

给定如下字符串列表:

"Y:Yes",
"N:No",
"A:Apple"
我有点像

Map updated = values.stream().map(v -> v.split(":")).collect(Collectors.toMap(v1 -> v1[0],v1->v1.length>1?v1[1]:v1[0]));
但这给了我一张地图:

{
"Y":"Yes",
"N":"No",
"A":"Apple"
}
我如何获得地图列表,例如:

[
{
  name:"Y",  
  display:"Yes"
},
{
  name:"N",  
  display:"No"
},
{
  name:"A",  
  display:"Apple"
}
]

由于要获取列表而不是映射,最后一个函数调用不能是Collectors.toMap,必须是Collectors.toList。现在,对map方法的每次调用都应该生成一个新的map,这样做:

List updated = values.stream()
    .map(v -> {
        String[] parts = v.split(":");
        Map<String, String> map = new HashMap<>();
        map.put("name", parts[0]);
        map.put("display", parts[1]);
        return map;
    )
    .collect(Collectors.toList());

顺便说一句:在示例中,我使用了List,但您描述的完整类型是List。

由于您希望获得列表而不是映射,您的最后一个函数调用不能是Collectors.toMap,需要是Collectors.toList。现在,对map方法的每次调用都应该生成一个新的map,这样做:

List updated = values.stream()
    .map(v -> {
        String[] parts = v.split(":");
        Map<String, String> map = new HashMap<>();
        map.put("name", parts[0]);
        map.put("display", parts[1]);
        return map;
    )
    .collect(Collectors.toList());

顺便说一句:在示例中,我使用了列表,但您描述的完整类型是列表。

如果您使用的是Java 9,您可以使用新的,如下所示:

List<Map<String, String>> updated = values.stream()
    .map(v -> v.split(":"))
    .map(a -> Map.of("name", a[0], "display", a[1]))
    .collect(Collectors.toList());

如果您使用的是Java 9,则可以使用新的,如下所示:

List<Map<String, String>> updated = values.stream()
    .map(v -> v.split(":"))
    .map(a -> Map.of("name", a[0], "display", a[1]))
    .collect(Collectors.toList());

如果您仍在使用Java8,您可以使用以下内容,如果您碰巧使用了Java9,请查看:


如果您仍在使用Java8,您可以使用以下内容,如果您碰巧使用了Java9,请查看:


可能与您的问题重复?@erickson Hi我更新了我的问题,使之更具描述性。@nullpointer Hi,我看了另一个问题,对我的问题没有帮助。我想要一个带有自定义键的地图列表。@user1491987您当前的DS代表该列表是什么?请使用当前列表和输出列表类型更新问题,以及您的代码有什么错误。可能与您的错误重复?@erickson Hi我更新了我的问题,使其更具描述性。@nullpointer Hi,我查看了另一个问题,对我的问题没有帮助。我想要一个带有自定义键的地图列表。@user1491987您当前的DS代表该列表是什么?请使用当前列表和输出列表类型更新问题,以及您的代码有何错误。我不确定您如何收集toList并最终得到一个Map您指的是变量的类型!固定,需要是一个列表我不确定,你如何收集toList并最终得到一个Map你指的是变量的类型!已修复,需要一个列表
final List<Map<String,String>> updated = values.stream()
    .map(v -> v.split(":"))
    .map(arr -> {
        Map<String, String> map = new HashMap<>();
        map.put("name", arr[0]);
        map.put("display", arr[1]);
        return map;
    })
    .collect(Collectors.toList());