从列表转换为`SqlParameterSource`数组,即将列表转换为映射数组

问题描述 投票:0回答:1

我有一个实体列表,我想使用 JDBC 命名模板将其与另一个实体相关联。为此,我使用批量更新操作在连接表上插入 ID 对,但问题是我发现生成

SqlParameterSource
数组的方法有点笨拙。有没有办法用流来做到这一点?

// Create an array of the size of the fruit list.
final SqlParameterSource[] fruitParameters = new SqlParameterSource[tree.getFruits().size()];

// Get all the fruits to iterate through.
final List<Fruit> fruits = tree.getFruits();

// Fill the array with the parameter sources.
for (int i = 0; i < fruitIds.length; i++) {
    final var fruit = fruits.get(i);

    final var parameters = new MapSqlParameterSource();
    parameters.addValue("fruit_id", fruit.getId());
    parameters.addValue("tree_id", tree.getId());

    fruitParameters[i] = parameters;
}

我认为问题归结为将列表转换为地图数组。

java arrays list java-stream namedparameterjdbctemplate
1个回答
2
投票
 fruits.stream().map(fruit-> {
        var parameters = new MapSqlParameterSource();
        parameters.addValue("fruit_id", fruit.getId());
        parameters.addValue("tree_id", tree.getId());
        return parameters;
    }).toArray(SqlParameterSource[]::new);

如果您可以创建采用 Fruit 对象并返回 MapSqlParameterSource 的方法,从可读性的角度来看会更好,并且您只需在映射方法内调用该方法

© www.soinside.com 2019 - 2024. All rights reserved.