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

Java如何遍历JSON映射的POJO数组 用Stream拼接SQL查询数据库

实现方案

你的入参是数组结构的JSON,反序列化后直接对应List<自定义POJO>类型,之前尝试的Map.Entry遍历方式不适用这个场景——因为外层没有键值对结构,不需要转Map处理,直接按层级遍历即可。

参考POJO定义(基于你已有的代码补全)

// 可根据实际情况修改类名
public class QueryCondition {
    private Integer k1;
    private List<Integer> k2 = new ArrayList<>();

    public Integer getK1() {
        return k1;
    }

    public void setK1(Integer k1) {
        this.k1 = k1;
    }

    public List<Integer> getK2() {
        return k2;
    }

    public void setK2(List<Integer> k2) {
        this.k2 = k2;
    }
}

请求JSON反序列化后会得到List<QueryCondition>类型的对象,直接操作这个列表即可。

普通嵌套循环实现(逻辑直观,便于调试)

先遍历外层列表拿到每个对象的k1值,再遍历当前对象的k2列表,逐个拼接SQL:

// 假设requestList是反序列化得到的List<QueryCondition>
for (QueryCondition condition : requestList) {
    Integer col1Value = condition.getK1();
    for (Integer col2Value : condition.getK2()) {
        // 生产环境强烈建议使用预编译SQL代替字符串拼接,避免SQL注入风险
        String sql = String.format("select * from table where col1=%d and col2=%d", col1Value, col2Value);
        // 此处可直接执行数据库调用,不需要等所有SQL拼接完成
        System.out.println(sql);
    }
}

运行后输出完全匹配你的预期结果。

Stream流实现(代码更简洁)

通过flatMap展开内层的k2列表,直接生成所有需要的SQL语句:

List<String> sqlList = requestList.stream()
        .flatMap(condition -> condition.getK2().stream()
                .map(col2Val -> String.format("select * from table where col1=%d and col2=%d", condition.getK1(), col2Val))
        )
        .collect(Collectors.toList());

// 遍历生成的SQL执行数据库操作
sqlList.forEach(sql -> {
    // 填入你的数据库调用逻辑
    System.out.println(sql);
});

注意事项

  • SQL注入风险提示:如果k1、k2的值来自用户输入,直接字符串拼接SQL会有严重的注入漏洞,请替换为JDBC预编译语句、或者ORM框架的参数绑定写法,不要直接拼接参数值到SQL中。
  • 如果不需要留存所有生成的SQL,不管是循环写法还是Stream写法,都可以在生成SQL的当下直接发起数据库调用,不需要额外用列表存储所有SQL,减少内存占用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 09:57:30