如何无需循环将List<CategoriesModel>中的名称克隆到String数组?
无需显式循环提取属性的方案
当然可以!在Java 8及以后的版本里,Stream API就是干这个的——它能帮你用声明式的代码完成这类集合转换,完全不用写手动的for循环。
直接上代码:
String[] namesList = categoriesModelList.stream() .map(CategoriesModel::getName) // 提取每个对象的name属性 .toArray(String[]::new); // 将流转换为String数组
代码解释:
stream():把你的List<CategoriesModel>转换成一个可操作的流对象map(CategoriesModel::getName):这一步是"映射"操作,把流里的每个CategoriesModel对象都转换成它的name属性值(这里用的是方法引用,和lambda表达式model -> model.getName()效果完全一样)toArray(String[]::new):最后把处理后的流转换成String[]数组,String[]::new是构造方法引用,用来创建对应长度的数组
如果之后你需要的是List<String>而不是数组,也可以用这个写法:
List<String> namesList = categoriesModelList.stream() .map(CategoriesModel::getName) .collect(Collectors.toList());
对比你原来的循环写法,Stream API的代码更简洁直观,能让你一眼看明白这段代码的核心意图——提取所有name属性,而不用关心循环的细节。
内容的提问来源于stack exchange,提问作者Taha Sami
相关产品推荐
相关产品推荐

