流式传输地图列表并收集特定密钥

Sno*_*now 6 java java-8 java-stream

这是我的清单:

[
    {name: 'moe', age: 40}, 
    {name: 'larry', age: 50}, 
    {name: 'curly', age: 60}
];
Run Code Online (Sandbox Code Playgroud)

我想挖name取值并创建另一个List像这样:

["moe", "larry", "curly"]
Run Code Online (Sandbox Code Playgroud)

我写了这段代码,它的工作原理如下:

List<String> newList = new ArrayList<>();
for(Map<String, Object> entry : list) {
    newList.add((String) entry.get("name"));
}
Run Code Online (Sandbox Code Playgroud)

但是如何在使用中做到这一点stream.我试过这个代码不起作用.

List<String> newList = list.stream().map(x -> x.get("name")).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

Era*_*ran 8

由于您List看起来像是a List<Map<String,Object>,您的流管道会生成List<Object>:

List<Object> newList = list.stream().map(x -> x.get("name")).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

或者,String如果您确定只获得Strings ,则可以将值转换为:

List<String> newList = list.stream().map(x -> (String)x.get("name")).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)