Java 如何将带有服务调用的循环重构到流中?
您将如何将此代码重构为流Java 如何将带有服务调用的循环重构到流中?,java,java-8,java-stream,Java,Java 8,Java Stream,您将如何将此代码重构为流 for (ConditionEntity conditionEntity : dbData.getContent()) { AdminCondition adminCondition = dataEntityMapper.conditionEntitytoModel(conditionEntity); this.myService.addBasicInterest(adminCondition); // <=== thi
for (ConditionEntity conditionEntity : dbData.getContent()) {
AdminCondition adminCondition =
dataEntityMapper.conditionEntitytoModel(conditionEntity);
this.myService.addBasicInterest(adminCondition); // <=== this is my Problem
conditionList.add(adminCondition);
}
谢谢你的帮助 List conditionList=new ArrayList();
List<AdminCondition > conditionList = new ArrayList<>();
dbData.getContent()
.stream()
.map(conditionEntity -> dataEntityMapper.conditionEntitytoModel(conditionEntity))
.forEach(adminCondition -> {
this.myService.addBasicInterest(adminCondition);
conditionList.add(adminCondition);
});
dbData.getContent()
.stream()
.map(conditionEntity->dataEntityMapper.conditionEntitytoModel(conditionEntity))
.forEach(管理条件->{
this.myService.addBasicInterest(adminCondition);
条件列表。添加(adminCondition);
});
只需执行以下操作
dbData.getContent().stream()
.map(conditionEntity -> {
AdminCondition adminCondition = dataEntityMapper.conditionEntitytoModel(conditionEntity);
this.myService.addBasicInterest(adminCondition);
})
.collect(conditionList);
我很可能会把它分成两个单独的陈述
dbData.getContent().stream()
.map(conditionEntity->dataEntityMapper.conditionEntitytoModel(conditionEntity))
.收取(条件清单);
conditionList.forEach(adminCondition->this.myService.addBasicInterest(adminCondition))
我更喜欢以下解决方案:
List<ConditionEntity> conditions = dbData.getContent().stream()
.map(dataEntityMapper::conditionEntitytoModel)
.collect(Collectors.toList());
conditions.forEach(this::addBasicInterest);
List conditions=dbData.getContent().stream()
.map(dataEntityMapper::conditionEntitytoModel)
.collect(Collectors.toList());
conditions.forEach(this::addBasicInterest);
创建一个单独的方法,将conditionEntity和service return conditionEntity一起执行操作发送到流的映射并收集结果这看起来不错。。。但条件清单必须是最终的:(哦..这是为什么呢?map使用了一个函数,它意味着它应该返回某个值X,我已经有了这个变量。但是我如何证明它比loopIt更好、更清晰呢?它应该返回adminCondition。很难说哪个更可读。我想让它更可读的一种方法是将conditionLIst重命名为adminConditionList只是为了让我们知道它是一个adminConditions列表。我个人觉得非流版本有时更可读。不错,但一般来说peek用于调试。我会在方法中调用服务并将数据对象返回到mapI。我认为您不需要那个额外的方法。您可以只执行dataEntityMapper::ConditionItyModel
。现在可能是我们将peek(myService::addBasicInterest)
称为反模式的时候了,并将其全部烧掉minds@Eugene是的。最好只做myService.addBasicInterests(条件)
改为结尾处。我已将我的答案编辑为不再使用peek
。我同意@Eugene不应在该上下文中使用它。
List<ConditionEntity> conditions = dbData.getContent().stream()
.map(dataEntityMapper::conditionEntitytoModel)
.collect(Collectors.toList());
conditions.forEach(this::addBasicInterest);