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));