Java 使用stream和lambda美化循环
目前我得到了以下代码:Java 使用stream和lambda美化循环,java,java-stream,Java,Java Stream,目前我得到了以下代码: @GetMapping("/all/") public Iterable<Article> getAllArticle(){ ArrayList<ArticleEntity> articleEntities = Lists.newArrayList(articleProviderComponent.getAllArticle()); ArrayList<Article> articles = Li
@GetMapping("/all/")
public Iterable<Article> getAllArticle(){
ArrayList<ArticleEntity> articleEntities = Lists.newArrayList(articleProviderComponent.getAllArticle());
ArrayList<Article> articles = Lists.newArrayList();
for(ArticleEntity articleEntity : articleEntities){
articles.add(ArticleMapper.articleEntity2Article(articleEntity));
}
return articles;
}
@GetMapping(“/all/”)
公共Iterable getAllArticle(){
ArrayList articleEntities=Lists.newArrayList(articleProviderComponent.getAllArticle());
ArrayList articles=Lists.newArrayList();
for(ArticleEntity ArticleEntity:articleEntities){
添加(ArticleMapper.articleEntity2Article(articleEntity));
}
归还物品;
}
存储库返回一个Iterable
,我想将其转换为ArrayList
。除此之外,我想将每个实体
转换为POJO
我试过用类似的东西
list.foreach(ArticleMapper::ArticleMapper.articleEntity2Article)
它工作正常,但不返回新列表。一个简单的映射将完成以下工作:
List<Article> articles = articleEntities.stream()
.map(ArticleMapper::articleEntity2Article)
.collect(Collectors.toList());
List articles=articleEntities.stream()
.map(ArticleMapper::articleEntity2Article)
.collect(Collectors.toList());
map
使用给定的方法将每个元素转换为其他元素。流式处理列表
,map
将其映射到目标类型,并收集
到列表
:
List<Article> articles = articleEntities.stream().map(ArticleMapper::articleEntity2Article).collect(Collectors.toList());
List articles=articleEntities.stream().map(ArticleMapper::articleEntity2Article.collect(Collectors.toList());
由于Iterable
是尽可能的通用,它不提供流式传输其内容的功能,但是在StreamSupport
的帮助下,您可以从Iterable
实例生成流
,并将操作量减少到一个:
final List<Article> articlesList =
StreamSupport.stream(articleProviderComponent.getAllArticle().spliterator(), false)
.map(ArticleMapper::articleEntity2Article)
.collect(Collectors.toList());
final List articlesList=
StreamSupport.stream(articleProviderComponent.getAllArticle().spliterator(),false)
.map(ArticleMapper::articleEntity2Article)
.collect(Collectors.toList());
基本上,其他答案显示了正确的方向。但是,如果您想保持代码的相同语义,就必须考虑一些额外的因素
根据collectors.toList
返回一个收集器
,该收集器将输入元素累加到一个新的
列表
。对于类型、可变性、,
返回的列表的可序列化性或线程安全性;如果更多
需要控制返回的列表
,请使用
收集(供应商)
返回的文章
类型为ArrayList
。因此,该列表是可变的
方法getAllArticle()
的返回类型是Iterable
。因此,我们可以
Iterator<Article> iterator = getAllArticle().iterator();
这将返回由Lists.newArrayList()生成的文章
List<Article> articles = articleEntities.stream()
.map(ArticleMapper::articleEntity2Article)
.collect(Collectors.toCollection(Lists::newArrayList));