Ich habe ein Prädikat, mit dem ich eine Liste desselben Entitätsobjekts filtere:
Predicate<DWHDeal> companyFilter = i -> i.getCompany().equals(company);
Ich muss auch denselben Filter mit genau derselben Bedingung auf genau dasselbe Feld auf eine Liste von DTOs anwenden, bei denen das DTOS basierend auf der Entität von zuvor erstellt wird:
Predicate<DWHDealDTO> companyFilterDTO = i -> i.getCompany().equals(company);
Ist es möglich, dies zu erreichen, ohne zwei verschiedene Prädikate zu instanziieren? Wenn möglich, möchte ich dies erreichen, indem ich nur eine mache Predicate
.
DWHDealDTO
undDWHDeal
verwandt? (wie die Erweiterung derselben Klasse)getCompany()
in beiden Fällen der gleiche Typ zurück?Predicate
mit einer normalen Klasse oder dem Versuch, eine Methode zu schreiben, die beideDWHDeal
undDWHDealDTO
als Parameter akzeptiert . Wenn diese Klassen keine gemeinsame Schnittstelle oder Oberklasse haben, die eine gemeinsame Methode deklariert, haben sie keine gemeinsame Methode, sondern nur zwei nicht verwandte Methoden, die zufällig denselben Namen haben.Antworten:
Unter der Annahme ,
getCompany()
kehrt einString
Sie schaffen könntenPredicate<String>
:Und dann verwenden Sie es wie:
Es gibt jedoch nicht viel Nutzen, da fast derselbe Code erforderlich ist.
quelle
Wenn nur Gleichheit geprüft wird, können Sie das statische Prädikat isEqual (Object targetRef) verwenden. Siehe Java-Dokument https://docs.oracle.com/javase/8/docs/api/java/util/function/Predicate.html#isEqual-java.lang.Object-
quelle
Ich denke, Sie benötigen eine,
Function<T,R>
bevor Sie verwendenPredicate
:Es gibt zwei Konzepte für die Funktion. Erstens ist a,
java.util.function.Function
das ein Argument akzeptiert und ein Ergebnis erzeugt . Die zweite ist die Zwischenbetriebskennstrom, der jedes Element in einem wandelt Strom in einem anderen Objekt über das bereitgestellte Funktion.In Ihrem Fall
Function
sollte das so aussehen:Ich habe das folgende Basisprogramm mit Erfolg ausprobiert:
quelle
Wie in den Kommentaren vorgeschlagen, wäre die gemeinsame Schnittstelle die bevorzugte Lösung.
Ich denke, Sie könnten so etwas tun, aber um fair zu sein, ist es hässlich.
quelle