Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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 将字符串列表拆分为映射列表_Java_List_Java 8_Java Stream - Fatal编程技术网

Java 将字符串列表拆分为映射列表

Java 将字符串列表拆分为映射列表,java,list,java-8,java-stream,Java,List,Java 8,Java Stream,我有以下清单 [12_223,13_4356,15_5676] 我能够使用下面的代码将下划线拆分并将其转换为一个Hashmap list.stream() .map(s -> s.split("_")) .collect(Collectors.toMap( a -> a[0], a -> a[1])); 它给出了下面的地图 {“12”=“223”,“13”=“4356”,“15”=“5676”} 但是我想修改这段代码,这样它会给

我有以下清单
[12_223,13_4356,15_5676]

我能够使用下面的代码将下划线拆分并将其转换为一个Hashmap

list.stream()
    .map(s -> s.split("_"))
    .collect(Collectors.toMap(
        a -> a[0],
        a -> a[1]));
它给出了下面的地图
{“12”=“223”,“13”=“4356”,“15”=“5676”}

但是我想修改这段代码,这样它会给我一个如下的地图列表,因为我在分割时可能会遇到重复的键


[{“12”=“223”},{“13”=“4356”},{“15”=“5676”}]

这就是您要找的

List<Map<String, String>> output = list.stream().map(
s-> {
        Map<String, String> element = new HashMap<>();
        String[] arr = s.split("_");
        element.put(arr[0], arr[1]);
        return element;
    }).collect(Collectors.toList());
List output=List.stream().map(
s->{
Map元素=新的HashMap();
字符串[]arr=s.split(“”);
元素put(arr[0],arr[1]);
返回元素;
}).collect(Collectors.toList());
但正如@Pshemo所建议的,这应该更合适

    Map<String, List<String>> outputnew = list.stream().map(
            s -> s.split("_"))
            .collect(Collectors.groupingBy(s -> s[0],  
                    Collectors.mapping(s -> s[1], Collectors.toList()))); 
Map outputnew=list.stream().Map(
s->s.split(“”))
.collect(收集器.groupingBy->s[0],
Collectors.mapping(s->s[1],Collectors.toList());

这就是您想要的

List<Map<String, String>> output = list.stream().map(
s-> {
        Map<String, String> element = new HashMap<>();
        String[] arr = s.split("_");
        element.put(arr[0], arr[1]);
        return element;
    }).collect(Collectors.toList());
List output=List.stream().map(
s->{
Map元素=新的HashMap();
字符串[]arr=s.split(“”);
元素put(arr[0],arr[1]);
返回元素;
}).collect(Collectors.toList());
但正如@Pshemo所建议的,这应该更合适

    Map<String, List<String>> outputnew = list.stream().map(
            s -> s.split("_"))
            .collect(Collectors.groupingBy(s -> s[0],  
                    Collectors.mapping(s -> s[1], Collectors.toList()))); 
Map outputnew=list.stream().Map(
s->s.split(“”))
.collect(收集器.groupingBy->s[0],
Collectors.mapping(s->s[1],Collectors.toList());

如果您真的希望结果是地图列表,我会这样做:

List<Map<String, String>> listOfMaps(List<String> list) {
    return list.stream()
               .map(s -> s.split("_", 2))
               .map(a -> Collections.singletonMap(a[0], a[1]))
               .collect(toList());
}
List<Map<String, String>> listOfMaps(List<String> list) {
    return list.stream()
               .map(s -> s.split("_", 2))
               .map(a -> Map.of(a[0], a[1]))
               .collect(toList());
}

在这两种情况下,结果列表中的地图实例都是不可修改的。

如果您真的希望结果是地图列表,我会这样做:

List<Map<String, String>> listOfMaps(List<String> list) {
    return list.stream()
               .map(s -> s.split("_", 2))
               .map(a -> Collections.singletonMap(a[0], a[1]))
               .collect(toList());
}
List<Map<String, String>> listOfMaps(List<String> list) {
    return list.stream()
               .map(s -> s.split("_", 2))
               .map(a -> Map.of(a[0], a[1]))
               .collect(toList());
}

在这两种情况下,结果列表中的地图实例都是不可修改的。

为什么需要地图列表?这张地图怎么了?@argetman我可能会复制一张keys@Jeyaprakash请将这些信息放在问题中,因为这可能是建议答案的重要方面。无论如何,在这种情况下,列表映射
map
不是更合适吗?您的目标是什么?为什么不将其作为2元素数组保存在
列表中?或者使用新的AbstractMap.SimpleEntry(k,v)
创建一个
列表。您不需要为每一对都提供一个完整的
映射
对象。为什么需要映射列表?这张地图怎么了?@argetman我可能会复制一张keys@Jeyaprakash请将这些信息放在问题中,因为这可能是建议答案的重要方面。无论如何,在这种情况下,列表映射
map
不是更合适吗?您的目标是什么?为什么不将其作为2元素数组保存在
列表中?或者使用新的AbstractMap.SimpleEntry(k,v)
创建一个
列表。您不需要为每一对映射一个完整的
对象。。。您可能需要使用什么
s->split(“\u0”),2)
…如果输入有许多“\u0”。。。您可能需要什么样的
s->split(“,2)
。。。