如何在Java8中从对象列表设置类属性
我有一个PageSummary对象的ArrayList,我想使用Java8将list对象的值设置为我的模型类属性如何在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
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!