java - Streams 中的 map() 如何工作以及当参数是 Collection 时如何使用它

标签 java collections java-stream

我正在 Java 8 中使用 Streams。我需要在 Colegio 类中实现一个方法,它从 Curso 类中的列表“inscriptionList”返回每个注释 (Inscripcion.getNota())。使用 filter() 可以通过参数传递其“名称”(nombreCurso) 来了解 Curso 的音符。该方法必须使用 Streams 来实现。我不明白 map() 方法如何使用列表作为参数来工作。有可能是这样的吗? (void notasDelCurso(nombreCurso))

在 Colegio 类(class)中:

public class Colegio {
    private List<Curso> cursos;

    //Constructor and getter omitted

public void notasDelCurso(String nombreCurso){
    cursos.stream()
          .filter(s -> s.getNombreCurso().equals(nombreCurso))
          .map(s -> s.getInscripcionList().stream()
                                          .map(j -> j.getNota()))
          .forEach(s -> System.out.println(s));
}

光标:

public class Curso {
    private String nombreCurso;
    private Integer cupo;
    private double notaAprobacion;
    private List<Inscripcion> inscripcionList;

   //Constructor and getter omitted

铭文:

public class Inscripcion {
    private Alumno alumno;
    private Curso curso;
    private long nota;

    //Constructor and getter omitted

输出: java.util.stream.ReferencePipeline$3@5fd0d5ae

最佳答案

I don't understand how the map() method works using a List as an argument

map 方法根据您提供的Function 将当前实体类型转换为另一种类型。

The output: java.util.stream.ReferencePipeline$3@5fd0d5ae

出于同样的原因,您的案例中的输出是打印您已将初始实体映射到的Stream


在处理 List 或任何其他实体集合时,您想要展平集合,并且在转换时可以使用 flatMap来自Stream的操作。在您共享的代码中,您可以按以下形式使用它:

.flatMap(s -> s.getInscripcionList().stream()
                              .map(j -> j.getNota()))

关于java - Streams 中的 map() 如何工作以及当参数是 Collection 时如何使用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61534719/

相关文章:

java - 在java8中迭代嵌套对象

java - 使用 Java 映射访问模式在 Mongo 中进行不同查询

php - 将键/值对与 Laravel 模型关系隔离

java - 将文件中的键值对添加到 Hashmap

list - 根据多个包含过滤列表

java - Java中的集合和列表有什么区别?

java 8 以 "forky"方式使用流

java - 为什么数组索引没有被交换?

.NET 加密的 Java 等价物 - DESCryptoServiceProvider

java - try/catch 不适用于静态成员可抛出类?