Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.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
Java 如何将带有服务调用的循环重构到流中?_Java_Java 8_Java Stream - Fatal编程技术网

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