我有一个实体列表,我想使用 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;
}
我认为问题归结为将列表转换为地图数组。
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 的方法,从可读性的角度来看会更好,并且您只需在映射方法内调用该方法