Первая проблема: Stream.of
создаст поток int arrays
вместо потока Integer
Например
Stream.of(empIds).forEach(System.out::println); //[I@7c3e4b1a
IntStream.of(empIds).forEach(System.out::println); //1 2 3
Так что используйте IntStream.of
или Arrays.stream()
Если findById()
возвращает Optional<Student>
, тогда используйте isPresent
для обработки только Optional
объектов, содержащих Student
Arrays.stream
List<Student> students= Arrays.stream(empIds)
.mapToObj(studentRepository::findById)
.filter(Optional::isPresent)
.map(Optional::get)
.collect(Collectors.toList());
IntStream.of
List<Student> students= IntStream.of(empIds)
.mapToObj(studentRepository::findById)
.filter(Optional::isPresent)
.map(Optional::get)
.collect(Collectors.toList());
В текущем подходе вы возвращаетесь List<Optional<Student>>
List<Optional<Student>> students= IntStream.of(empIds)
.map(studentRepository::findById).collect(Collectors.toList());