Java 我应该使用什么中间方法在流调用的某个点执行某些操作?
我在服务中有一个从数据库检索courses对象的方法。在将其发送到控制器之前,我需要解压缩字段字节[]徽标。Logo是一个图像,在呈现到前端之前需要从数据库中解压缩。我试图用streams来实现这一点,但没有任何成功。在forEach()方法之后,map()方法不起作用Java 我应该使用什么中间方法在流调用的某个点执行某些操作?,java,lambda,functional-programming,java-stream,functional-interface,Java,Lambda,Functional Programming,Java Stream,Functional Interface,我在服务中有一个从数据库检索courses对象的方法。在将其发送到控制器之前,我需要解压缩字段字节[]徽标。Logo是一个图像,在呈现到前端之前需要从数据库中解压缩。我试图用streams来实现这一点,但没有任何成功。在forEach()方法之后,map()方法不起作用 public List getCoureses(){ List courses=courseRepositoryDao.findallbysicoursefreeandiscourseactive(true,true); 列出课
public List getCoureses(){
List courses=courseRepositoryDao.findallbysicoursefreeandiscourseactive(true,true);
列出课程名称TO=课程
.stream()
.forEach(course->course.setLogo(解压缩zlib(course.getLogo()))
.map(course->modelMapper.map(CourseMapper.tuserdtofreecourses(course),CourseDto.class))
.collect(Collectors.toList());
返回指定的课程到;
}
使用
peek(Consumer)
的存在使您可以在流调用的某个点执行某些操作。因此,请使用它而不是forEach(Consumer)
javadoc声明:
返回一个由该流的元素组成的流,在从结果流中消耗元素时,对每个元素执行提供的操作
就这样说吧:
public List<CourseDto> getCoureses() {
List<Courses> courses = courseRepositoryDao.findAllByIsCourseFreeAndIsCourseActive(true, true);
List<CourseDto> coursesNameDto = courses
.stream()
.peek(byteArray -> byteArray.setLogo(decompressZLib(byteArray.getLogo()))
.map(course -> modelMapper.map(CourseMapper.toUserDtoFreeCourses(course), CourseDto.class))
.collect(Collectors.toList());
return coursesNameDto;
}
public List getCoureses(){
List courses=courseRepositoryDao.findallbysicoursefreeandiscourseactive(true,true);
列出课程名称TO=课程
.stream()
.peek(byteArray->byteArray.setLogo(decompressZLib(byteArray.getLogo()))
.map(course->modelMapper.map(CourseMapper.tuserdtofreecourses(course),CourseDto.class))
.collect(Collectors.toList());
返回指定的课程到;
}
为什么forEach
不起作用?
forEach
是一个,这意味着在此之后流不能被重用。这也是forEach
返回void
的原因,当然,该语言使它成为一个函数,因此在方法返回void
后,您不能进行链式调用
peek(Consumer)
的存在使您可以在流调用的某个点执行某些操作。因此,请使用它而不是forEach(Consumer)
javadoc声明:
返回一个由该流的元素组成的流,在从结果流中消耗元素时,对每个元素执行提供的操作
就这样说吧:
public List<CourseDto> getCoureses() {
List<Courses> courses = courseRepositoryDao.findAllByIsCourseFreeAndIsCourseActive(true, true);
List<CourseDto> coursesNameDto = courses
.stream()
.peek(byteArray -> byteArray.setLogo(decompressZLib(byteArray.getLogo()))
.map(course -> modelMapper.map(CourseMapper.toUserDtoFreeCourses(course), CourseDto.class))
.collect(Collectors.toList());
return coursesNameDto;
}
public List getCoureses(){
List courses=courseRepositoryDao.findallbysicoursefreeandiscourseactive(true,true);
列出课程名称TO=课程
.stream()
.peek(byteArray->byteArray.setLogo(decompressZLib(byteArray.getLogo()))
.map(course->modelMapper.map(CourseMapper.tuserdtofreecourses(course),CourseDto.class))
.collect(Collectors.toList());
返回指定的课程到;
}
为什么forEach
不起作用?
forEach
是一个,这意味着在此之后流不能被重用。这也是forEach
返回void
的原因,当然,该语言使它成为一个函数,因此在方法返回void
后,您不能进行链式调用
像map
这样的中间操作会立即返回并修改流(实际上是创建一个新的流对象)。它们所表示的操作可能会在终端操作运行时执行
终端操作是指在流管道末端运行的操作。它们应用于收集元素或执行流所需的任何操作
调用终端操作后,不能再使用流。forEach
是一个流
像map
这样的中间操作会立即返回并修改流(实际上是创建一个新的流对象)。它们所表示的操作可能会在终端操作运行时执行
终端操作是指在流管道末端运行的操作。它们应用于收集元素或执行流所需的任何操作
调用终端操作后,您不能再使用流。一个
byteArray
如何成为课程
呢?这是OP的代码,不是我的。我想这就是map
方法的内容。它工作正常!一个byteArray
如何成为课程
呢?这是OP的代码,不是m我想这就是map
方法的内容。它工作得很好!