如何用Stream将实体列表转换为SqlParameterSource数组?
使用Stream简化SqlParameterSource数组生成
当然可以用Stream来简化这个转换,代码会更简洁易读,还能避免手动管理数组索引的麻烦。
优化后的Stream实现代码
final Long treeId = tree.getId(); final SqlParameterSource[] fruitParameters = tree.getFruits() .stream() .map(fruit -> new MapSqlParameterSource() .addValue("fruit_id", fruit.getId()) .addValue("tree_id", treeId)) .toArray(SqlParameterSource[]::new);
关键说明
- 先提取
tree.getId()到变量中,避免在Stream的map操作里重复调用(虽不影响功能,但更严谨) - 通过
stream()将List转为流,再用map操作把每个Fruit对象转换成对应的MapSqlParameterSource实例 - 最后用
toArray(SqlParameterSource[]::new)直接生成目标类型数组,无需手动初始化数组和赋值索引
补充:原代码的小问题
原代码里的循环条件i < fruitIds.length存在错误——代码中并未定义fruitIds变量,正确的条件应该是i < fruits.size(),而用Stream可以完全规避这类索引相关的失误。
内容的提问来源于stack exchange,提问作者MikelAlejoBR
相关产品推荐
相关产品推荐

