Как работает map () в Streams и как с ним работать, когда аргумент является коллекцией - PullRequest
2 голосов
/ 01 мая 2020

Я работаю с потоками в Java 8. Мне нужно реализовать метод в классе Colegio, где он возвращает каждую заметку (Inscripcion.getNota ()) из списка «inscriptionList» в классе Curso. Используйте filter (), чтобы узнать, какие записи Curso передают своему «Name» (nombreCurso) по параметру. Метод должен быть реализован с использованием Streams. Я не понимаю, как метод map () работает с использованием List в качестве аргумента. Это возможно что-то вроде этого? (void notasDelCurso (nombreCurso))

В классе Colegio:

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

1 Ответ

2 голосов
/ 01 мая 2020

Я не понимаю, как работает метод map () с использованием List в качестве аргумента

Метод map преобразует текущий тип сущности в другой тип, основанный на Function вы указали.

Вывод: java .util.stream. ReferencePipeline$3@5fd0d5ae

Вывод в вашем случае по той же причине - печать Stream, к которому вы отобразили свои начальные сущности.


При работе со списком или любым другим набором сущностей вы хотите сгладить коллекцию и при преобразовании, и для этого вы можете использовать flatMap операция с Stream. В коде, которым вы поделились, вы можете использовать его в виде:

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