Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java8中从对象列表设置类属性_Java_Java 8 - Fatal编程技术网

如何在Java8中从对象列表设置类属性

如何在Java8中从对象列表设置类属性,java,java-8,Java,Java 8,我有一个PageSummary对象的ArrayList,我想使用Java8将list对象的值设置为我的模型类属性 public class XXXX { for(PageSummary ps : pageSummaryList){ model = new Model(); model.setName(ps.getName()); model.setContent(getContent(ps.getName())); model.setRating(getAverageRating(ps.getN

我有一个PageSummary对象的ArrayList,我想使用Java8将list对象的值设置为我的模型类属性

public class XXXX {
for(PageSummary ps : pageSummaryList){
model = new Model();
model.setName(ps.getName());
model.setContent(getContent(ps.getName()));
model.setRating(getAverageRating(ps.getName()));
modelList.add(model);
}                   

private String getContent(String sopName){} 

private AverageRatingModel getAverageRating(String sopName){}
}

下面是getAverageRating函数返回1-5和getContent返回字符串之间的整数。

下面是一些提示:

  • 从列表中创建页面摘要流
  • 从页面摘要映射到模型
  • 收集模型对象
  • 以下是一些教程:


    首先,您应该使用
    页面摘要
    参数创建一个
    模型
    构造函数

    public Model(PageSummary ps) {
        this.setSopName(ps.getName());
        this.setSopContent(getContent(ps.getName(), clientCode, context, httpcliet));
        this.setAverageRating(getAverageRating(ps.getName(), clientCode, context, httpclient));
    }
    
    有鉴于此,您可以缩短循环:

    for (PageSummary ps : pageSummaryList) {
        ModelList.add(new Model(ps));
    }
    
    并轻松使用流API:

    // This solution is thread-safe only if ModelList is thread-safe
    // Be careful when parallelizing  :)
    pageSummaryList.stream().map(Model::new).forEach(ModelList::add);
    

    //使用Stream::collect()的线程安全解决方案
    列表模型=pageSummaryList.stream()
    .parallel()//可选:)
    .map(模型::新建)
    .collect(Collectors.toList());
    模型列表::添加所有(模型);//我想你不需要我们来实现这个!
    

    感谢您指出使用
    collect
    方法可以避免并行化时的并发问题:)

    我编辑了您的代码,使其更易于阅读。你的问题是什么?您的代码似乎做了您希望它做的事情。我的问题是将其转换为java 8公共类XXXX{for(PageSummary ps:pageSummaryList){model=new model();model.setName(ps.getName());model.setContent(getContent(ps.getName());model.setRating(getAverageRating(ps.getName());models.add(model);}私有字符串getContent(字符串sopName){}private AverageRatingModel getAverageRating(字符串sopName){}您应该在IMO中使用
    collect
    方法。只要将流并行化,并且
    modelsist
    不是线程安全的,就可以运行并发问题。在本文中,我有两个本地方法getContent和getaverating。我应该通过引用或其他方式在模型类中访问此方法吗?@PawanSharma好吧,如果没有代码,很难说,但是您可以将引用传递给
    模型的构造函数(并用lambda替换
    模型::new
    ),或者使这些方法
    静态
    @PawanSharma抱歉,我说的是
    getContent
    getAverageRating
    ^^的代码。此外,您不必在评论中发布它,编辑您的问题:)getAverageRating函数返回1-5和getContent返回字符串之间的整数。
    // A thread-safe solution using Stream::collect()
    List<Model> models = pageSummaryList.stream()
                                        .parallel() // optional :)
                                        .map(Model::new)
                                        .collect(Collectors.toList());
    ModelList::addAll(models); // I suppose you don't need us to implements this one!