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());