You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Java Stream API提取Category集合的code属性为字符串列表?

用Java 8 Stream API简化Category代码提取

没问题!Java 8的Stream API正好能帮你把这段遍历提取代码变得更简洁优雅,而且可读性和维护性都更好。先直接给你优化后的完整代码:

List<Category> categories = categoryService.getCategoriesForProductCode(productCode);
List<String> categoryCodes = categories.stream()
                                       .map(Category::getCode)
                                       .collect(Collectors.toList());

代码拆解说明:

  • categories.stream():把你的List<Category>转换成Stream流,开启流式操作的入口
  • .map(Category::getCode):这是方法引用的写法,等价于lambda表达式category -> category.getCode(),作用是把每个Category对象映射成它的code属性(完成类型从Category到String的转换)
  • .collect(Collectors.toList()):把流中转换后的所有String类型的code收集成一个List,替代了手动创建ArrayList并逐个add的过程

额外扩展场景:

  1. 指定具体的List实现:如果你需要明确生成ArrayList而不是默认的List实现,可以用:
List<String> categoryCodes = categories.stream()
                                       .map(Category::getCode)
                                       .collect(Collectors.toCollection(ArrayList::new));
  1. 过滤空值:如果担心某些Category的code为null,可以在转换后加过滤逻辑:
import java.util.Objects;

List<String> categoryCodes = categories.stream()
                                       .map(Category::getCode)
                                       .filter(Objects::nonNull)
                                       .collect(Collectors.toList());

和传统写法对比:

你的传统写法大概是这样的:

List<String> categoryCodes = new ArrayList<>();
for (Category category : categories) {
    categoryCodes.add(category.getCode());
}

Stream写法用链式调用把「遍历-转换-收集」的逻辑一次性表达清楚,代码更紧凑,后续如果要加排序、去重等逻辑,直接在链中追加方法即可,扩展性更强。

内容的提问来源于stack exchange,提问作者Rupesh Vislawath

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:18:51