这是我的清单:
[
{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());
答案 0 :(得分:8)
由于您的List
似乎是List<Map<String,Object>
,您的流管道会生成List<Object>
:
List<Object> newList = list.stream().map(x -> x.get("name")).collect(Collectors.toList());
如果您确定只获得String
s,则可以将值转换为String
:
List<String> newList = list.stream().map(x -> (String)x.get("name")).collect(Collectors.toList());
答案 1 :(得分:2)
x.get(&#34; name&#34;)应该转换为String。
例如:
List<String> newList = list.stream().map(x -> (String) x.get("name")).collect(Collectors.toList());
答案 2 :(得分:1)
如果你的迭代器中的list
类型为Map<String, Object>
,那么我认为执行该任务的最佳方法是调用方法keySet()
,它将返回Set
但是你可以通过以下方式从中创建ArrayList
:
List<String> result = new ArrayList(list.keySet());