Collections java8如何收集数据并将其作为对象的属性添加到列表中

Collections java8如何收集数据并将其作为对象的属性添加到列表中,collections,java-8,java-stream,Collections,Java 8,Java Stream,在java8之前,我们编写如下代码: List<ResultDTO> resources = Lists.newArrayList(); List<Product> productList = details.getProducts(); for (Product product : productList) { ResultDTO result = new ResultDTO(); result.

在java8之前,我们编写如下代码:

    List<ResultDTO> resources = Lists.newArrayList();        

    List<Product> productList = details.getProducts();
    for (Product product : productList) {
        ResultDTO result = new ResultDTO();
        result.setName(product.getName);
        result.setNumber(product.getNumber);

        resources.add(resourceDetail);
    }
List<ResultDTO> resources = Lists.newArrayList();
details.getProducts.stream().forEach( product -> {
    ResultDTO result = new ResultDTO();
    result.setName(product.getName);
    result.setNumber(product.getNumber);

    resources.add(resourceDetail);
} );
List resources=Lists.newArrayList();
List productList=details.getProducts();
对于(产品:productList){
ResultDTO result=新的ResultDTO();
result.setName(product.getName);
result.setNumber(product.getNumber);
添加(resourceDetail);
}
Java8我是这样写的:

    List<ResultDTO> resources = Lists.newArrayList();        

    List<Product> productList = details.getProducts();
    for (Product product : productList) {
        ResultDTO result = new ResultDTO();
        result.setName(product.getName);
        result.setNumber(product.getNumber);

        resources.add(resourceDetail);
    }
List<ResultDTO> resources = Lists.newArrayList();
details.getProducts.stream().forEach( product -> {
    ResultDTO result = new ResultDTO();
    result.setName(product.getName);
    result.setNumber(product.getNumber);

    resources.add(resourceDetail);
} );
List resources=Lists.newArrayList();
details.getProducts.stream().forEach(产品->{
ResultDTO result=新的ResultDTO();
result.setName(product.getName);
result.setNumber(product.getNumber);
添加(resourceDetail);
} );
我想知道当我们遍历流时,是否有一些技巧来创建ResultTo对象,设置它的属性,然后创建一个列表


提前感谢。

创建列表并在流操作中修改它是一种反模式。您应该让流为您创建列表:

List<ResultDTO> resources = 
    details.getProducts()
           .stream()
           .map(this::createResultDTO)
           .collect(Collectors.toList());
列出资源=
详细信息。getProducts()
.stream()
.map(此::CreateResultTo)
.collect(Collectors.toList());

createResultTo方法将从产品创建ResultTo(当然,您可以将其代码内联到映射中,但可读性要差得多)。

如JB所述,您可能希望从流中创建列表

List<ResultDTO> resources = details.getProducts()
                                   .stream()
                                   .map(this::createResultDTO)
                                   .collect(Collectors.toList());
您可以将此方法放在同一个类中并使用

.map(this::createResultTo)

或者在另一个名为
ProductResultTo
的类中,使用以下命令:


.map(productResultTo::createResultTo)

我个人可能会在
productResultTo
上添加一个名为
fromProduct
的静态工厂方法,这样您就可以编写
map(productResultTo::fromProduct)