如何使用Java的map函数或Stream简化集合遍历赋值代码?
使用Java Stream简化对象属性提取代码
正确简化写法
针对你需要提取集合中对象属性到新列表的需求,用Stream的map方法配合收集器可以一步完成,替代手动遍历添加的代码:
如果需要明确返回ArrayList:
var allObjectNames = allObjects.stream() .map(object -> object.name) .collect(Collectors.toCollection(ArrayList::new));
如果不需要指定具体集合类型(Java 8+返回不可变列表,Java 16+返回可变列表),可以用更简洁的写法:
var allObjectNames = allObjects.stream() .map(object -> object.name) .collect(Collectors.toList());
你之前尝试的问题
你写的allObjectsNames.addAll(map(allObjects.name))存在两处错误:
- 集合本身没有
map方法,必须先通过stream()把集合转换成Stream才能调用map。 allObjects.name写法错误,集合不能直接访问元素的属性,必须对集合中的每个元素单独操作。
结合你的示例代码验证
你提供的示例代码已经正确实现了Stream+map的用法,和你的需求逻辑完全一致:
var outputNames = rootOutput.stream().map(o -> o.outputName).collect(Collectors.toList());
这段代码就是把rootOutput里的每个Output对象,通过map提取outputName属性,最后收集成字符串列表,和你要简化的原始遍历代码功能完全相同。
内容的提问来源于stack exchange,提问作者Kollegah der Boss
相关产品推荐
相关产品推荐

