有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

共 (3) 个答案

  1. # 1 楼答案

    x.get(“name”)应转换为字符串

    例如:

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

  2. # 2 楼答案

    由于您的List似乎是一个List<Map<String,Object>,您的流管道将产生一个List<Object>

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

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

    List<String> newList = list.stream().map(x -> (String)x.get("name")).collect(Collectors.toList());
    
  3. # 3 楼答案

    如果迭代器中的list的类型为Map<String, Object>,那么我认为执行该任务的最佳方法就是调用方法keySet(),它将返回Set,但您可以通过以下方式从它创建ArrayList

    List<String> result = new ArrayList(list.keySet());