如何用Stream简化从ID列表创建Fruit对象的Java代码?
简化代码的几种方式
当然可以用Stream API来简化这段代码,以下是几种可行的方案:
基础Stream写法
直接用stream().map()转换元素,再收集为列表:
List<Fruit> fruits = fruitIds.stream() .map(id -> { Fruit fruit = new Fruit(); fruit.setId(id); return fruit; }) .collect(Collectors.toList());
优化构造器后的极简写法
如果能修改Fruit类,给它添加一个接收id的构造器:
public class Fruit { private long id; public Fruit(long id) { this.id = id; } // 保留原有的setter和getter public void setId(long id) { this.id = id; } public long getId() { return id; } }
这样就能用方法引用进一步简化Stream代码:
List<Fruit> fruits = fruitIds.stream() .map(Fruit::new) .collect(Collectors.toList());
保持初始容量的优化写法
如果想和原代码一样指定列表初始容量(避免扩容带来的性能损耗),可以用Collectors.toCollection():
List<Fruit> fruits = fruitIds.stream() .map(Fruit::new) .collect(Collectors.toCollection(() -> new ArrayList<>(fruitIds.size())));
内容的提问来源于stack exchange,提问作者MikelAlejoBR
相关产品推荐
相关产品推荐

