java流通过映射列表并收集特定密钥
以下是我的清单:
[
{name: 'moe', age: 40},
{name: 'larry', age: 50},
{name: 'curly', age: 60}
];
我想提取name
值并创建另一个List
如下:
["moe", "larry", "curly"]
我已经写了这段代码,它是有效的:
List<String> newList = new ArrayList<>();
for(Map<String, Object> entry : list) {
newList.add((String) entry.get("name"));
}
但是如何在使用stream
时做到这一点。我试过这个代码,但不起作用
List<String> newList = list.stream().map(x -> x.get("name")).collect(Collectors.toList());
# 1 楼答案
x.get(“name”)应转换为字符串
例如:
List<String> newList = list.stream().map(x -> (String) x.get("name")).collect(Collectors.toList());
# 2 楼答案
由于您的
List
似乎是一个List<Map<String,Object>
,您的流管道将产生一个List<Object>
:或者,如果您确定只获得
String
s,则可以将该值强制转换为String
:# 3 楼答案
如果迭代器中的
list
的类型为Map<String, Object>
,那么我认为执行该任务的最佳方法就是调用方法keySet()
,它将返回Set
,但您可以通过以下方式从它创建ArrayList
: