java 8 nested streams

java-8, java-stream, lambda

Solution

Guess what you need: (Assume getters are available for `Review` and `RelReviewImage`)

List<Review> originalReviews = ...

List<Review> result = originalReviews.stream()
    .filter(review -> review.getImages().stream() //Nested streams. Assume getImages() never null, but empty 
                          .anyMatch(image -> image.getIdImage() == 123)) //'2 level' here
    .collect(Collectors.toList());

Problem

Suppose you have structure classes like this: ``` public class Review{ private Integer idReview; private String description; private ArrayList<RelReviewImage> images; } public class RelReviewImage{ private Integer idRelReviewImage; private Integer idImage; private String name; } ``` With Java 8 and `Stream`s we want to do a filter for `idImage` and return `Review` objects. Is it possible? One level is easy, but 2 levels we can't find any example or documentation.

Original source