Filtern Sammlung stream innerhalb Sammlung stream vor der Rückkehr

Hintergrundinformationen

Habe ich die folgenden Klassen:

Versicherung

public class Insurance {
    ...
}

Kunde

public class Customer {
    private List<Insurance> insurances;

    public List<Insurance> getInsurances() {
        return insurances;
    }
    ...
}

CustomerRegistry

public class CustomerRegistry {
    private List<Customer> customers;
    ...
}

sowie das Helfer-Methode, die reduziert ein List<Predicate<T>> in einem einzigen Predicate<T>:

public Predicate<T> reducePredicates(List<Predicate<T>> predicates) {
    return predicates.stream()
                     .reduce(Predicate::and)
                     .orElse(p -> true);
}

Das problem

Was ich will zu tun ist, erhalten Sie eine Liste der Versicherungen, die sich entsprechen, eine Liste der Filter, die Zugehörigkeit der Kunden entsprechen, eine Liste der Filter. Wenn dies unklar ist, ist der code unten wird sich hoffentlich klären.

Methode ist innerhalb CustomerRegistry Klasse vor.

public List<Insurance> findInsurances(List<Predicate<Customer>> cusPredicates,
List<Predicate<Insurance>> insPredicates) {

    List<Insurance> matches = new LinkedList<>();
    customers.stream()
             .filter(reducePredicates(cusPredicates)
             .forEach(cus -> cus.getInsurances()
                               .stream()
                               .filter(reducePredicates(insPredicates))
                               .forEach(cus -> matches.add(cus)))
    return matches;
}

Gibt es eine Möglichkeit, dies zu tun, ohne die matches Liste? Kann ich führen Sie eine Art der Reduktion, so dass die passenden Versicherungen zurückgegeben direkt (d.h. nicht Hinzugefügt wird, um eine temporäre Sammlung wie matches)?

InformationsquelleAutor Martin M J | 2015-05-12
Schreibe einen Kommentar