Ich habe einige Java-Code, der eine Liste anhand einiger Eingaben filtert. Es nutzt derzeit eine Lambda, zum Beispiel:So konvertieren Sie Lambda-Filter mit dynamischen Werten zu Methodenreferenzen
public List<ComplexObject> retrieveObjectsFilteredByTags(List<String> allowedTags) {
List<ComplexObject> complexObjects = retrieveAllComplexObjects();
return complexObjects
.stream()
.filter(compObject -> allowedTags.contains(compObject.getTag()))
.collect(Collectors.toList());
}
Was ich tun möchte, ist die Filterlogik auf eine andere Methode zu bewegen, es testbar wiederverwendbar und leicht Einheit zu machen. Daher wollte ich anstelle des an die Filtermethode übergebenen Lambda eine Methodenreferenz verwenden. Einfach zu tun, wenn die Filterlogik ziemlich statisch ist (d. H. Die Liste der erlaubten Tags ist zur Kompilierungszeit bekannt), aber ich kann nicht herausfinden, wie dies mit dynamischen Daten im Filter zu tun ist.
Was ich wollte, war eine Möglichkeit, eine Methode Referenz zu verwenden und dann die zweite dynamische passieren param heißt
public List<ComplexObject> retrieveObjectsFilteredByTags(List<String> allowedTags) {
List<ComplexObject> complexObjects = retrieveAllComplexObjects();
return complexObjects
.stream()
.filter(this::filterByAllowedTags, allowedTags)
.collect(Collectors.toList());
}
So ist es möglich, zu tun, was ich will, oder bin ich diese Situation falsch möglicherweise anbietet?
Viele gute Option hier. Gute Antwort. –