You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Java Stream过滤List<Map<String,String>>并创建新对象

用Java Stream筛选Map集合并创建新对象

嗨,我来帮你搞定后续的操作!你已经完成了筛选符合条件的Map这一步,接下来只需要在Stream链中加入map()操作,就能把筛选后的Map转换成你需要的自定义对象啦。

步骤1:先定义你的自定义对象类

假设你想要创建的是一个Fruit对象,包含名称、颜色、价格这些属性,先把这个类写好:

class Fruit {
    private String name;
    private String color;
    private String price;

    // 带参构造方法,方便在Stream中直接调用
    public Fruit(String name, String color, String price) {
        this.name = name;
        this.color = color;
        this.price = price;
    }

    // 按需添加getter、setter和toString方法
}

步骤2:扩展Stream链完成转换

在你已有的筛选代码后面,加上map()来转换对象,最后用collect()收集成目标对象的List:

import java.util.stream.Collectors;

List<Map<String,String>> listOfItems = ...;

List<Fruit> appleFruits = listOfItems.stream()
    // 这里建议把常量放前面,避免m.get("name")为null时抛出空指针异常
    .filter(m -> "apple".equals(m.get("name")))
    // 将每个符合条件的Map转换成Fruit对象
    .map(m -> new Fruit(
        m.get("name"),
        m.get("color"),
        m.get("price")
    ))
    // 收集成Fruit对象的List
    .collect(Collectors.toList());

额外提示:处理空值和灵活转换

  • 如果Map中某些key可能不存在,为了避免空指针,你可以用Optional做安全处理:
import java.util.Optional;

.map(m -> new Fruit(
    Optional.ofNullable(m.get("name")).orElse("unknown"),
    Optional.ofNullable(m.get("color")).orElse("unknown"),
    Optional.ofNullable(m.get("price")).orElse("0.0")
))
  • 如果你的自定义对象更适合用无参构造+Setter的方式,也可以在map()里写代码块:
.map(m -> {
    Fruit fruit = new Fruit();
    fruit.setName(m.get("name"));
    fruit.setColor(m.get("color"));
    fruit.setPrice(m.get("price"));
    return fruit;
})

内容的提问来源于stack exchange,提问作者user3261334

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:24:46