将字符串列表拆分为地图列表

Jee*_*ppp 1 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]));
Run Code Online (Sandbox Code Playgroud)

它给出了下面的地图 {"12"="223", "13"="4356", "15"="5676"}

但我想更改此代码,以便它给我一个像下面的地图列表,因为我可能会在分割时遇到重复的键

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

Stu*_*rks 5

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

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());
}
Run Code Online (Sandbox Code Playgroud)

(HT:Eugene推荐split("_", 2).)

在Java 9中,您可以这样做:

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());
}
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,结果列表中的映射实例都是不可修改的.