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)
。。。