Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.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_Lambda_Functional Programming_Java Stream_Functional Interface - Fatal编程技术网

Java 我应该使用什么中间方法在流调用的某个点执行某些操作?

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); 列出课

我在服务中有一个从数据库检索courses对象的方法。在将其发送到控制器之前,我需要解压缩字段字节[]徽标。Logo是一个图像,在呈现到前端之前需要从数据库中解压缩。我试图用streams来实现这一点,但没有任何成功。在forEach()方法之后,map()方法不起作用

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
方法的内容。它工作得很好!