Zusammenfassen von Methoden in einer Hilfsmethode

Hallo liebes Forum,

ich habe mal eine Frage.
Derzeit schreibe ich einen Code zur Verwaltung von Immobilien und deren dazugehörigen Mietern.
Folgende 7 Methoden greifen alle auf die selbe Liste zurück:
searchStreet()
searchRenterFullName()
searchNumberofRooms()
searchAllRenters()
searchUnleased()
searchLeased()
searchUnleasedWithRoomsEqualTo()

Ich würde gerne eine Hilfsmethode dazu schreiben, damit ich nicht alle untereinander aufführen muss (da sie ja identisch aufgebaut wären).
Kann mir jemand einen Tipp geben wie diese Hilfsmethode aussehen müsste?

Vielen lieben Dank & Grüße!

P.S: Ja das ist eine Hausaufgabe. Ich möchte es auch selbst schreiben, bin gerade aber leider an dieser Stelle am verzweifeln ….
 
K

kneitzel

Also im Augenblick fehlen mir hier noch nähere Informationen, was Du genau meinst.

Wenn Du überall auf die gleiche Liste mit Daten zurück greifst und nur jeweils ein Suchkriterium unterschiedlich ist, dann kannst Du eine Methode schreiben, der Du halt auch das Kriterium übergibst. Das wäre dann in etwa wie bei der Streams API das .filter(...), das ein Predicate übergeben bekommt.
Predicate Java Docs: https://docs.oracle.com/javase/8/docs/api/java/util/function/Predicate.html

Und dann ist die jeweilige konkrete Suche nur noch ein Aufruf der neuen Methode mit einem Lambda Ausdruck als Predicate.
 
Java:
public List<Apartment> searchStreet(String street){
//
ArrayList returnList = new ArrayList();
apartments.stream().map(apartment -> street.equals(apartment.getStreet())).forEach(apartment -> returnList.add(apartment));
if(returnList.size() == 0){
    System.out.println("No match for:" + street + ". Please try a different street");
    return(returnList);
} else {   
return(returnList);
}
}     

public List<Apartment> searchRenter(String renterFirstName, String renterLastName){
//
String renterFullName = renterFirstName + " " + renterLastName;
ArrayList returnList = new ArrayList();
apartments.stream().map(apartment -> renterFullName.equals(apartment.getStreet())).forEach(apartment -> returnList.add(apartment));
if(returnList.size() == 0){
    System.out.println("No match for:" + renterFullName + ". Please try a different name.");
    return(returnList);
} else {   
return(returnList);
}
}
Ich dachte mir ich abstrahiere nur den unteren Teil über
private list check result (list returnList, object edObject. string messagePort)

Was meint ihr?
 
Hattest du den Code mal ausprobiert? stream().map() lässt dich ein Objekt in ein anderes Objekt (ggf auch anderer Datentyp) konvertieren. Du würdest momentan also alle Elemente deiner Liste in einen boolean konvertieren und diese danach einer List<Apartment> hinzufügen. Wenn du konstant mit Generics arbeiten würdest, würdest du das auch selber feststellen.

Wie @kneitzel das schon sehr schön gesagt hat, kannst du hier mit Predicates arbeiten. Das könnte dann zum Beispiel so aussehen
Java:
public List<Apartment> searchStreet(String street) {
    return search(apartment -> apartment.getStreet().equals(street));
}

public List<Apartment> searchRentner(String name, String lastname) {
    return search(apartment -> apartment.getRentner().getName().equals(name) && apartment.getRentner().getLastname().equals(lastname));
}

private List<Apartment> search(Predicate<Apartment> condition) {
    return apartments.stream().filter(condition).collect(Collectors.toList());
}
 
Habe auch versucht mit einem Collector zu arbeiten aber es gab ein conversions Problem und eine Kollision wegen abstraktem irgenetwas.. hat leider nicht geklappt :S

Ist das Return statement denn gültig? Hast du eine Dokumentation für "return search" ?
 
conversions Problem und eine Kollision wegen abstraktem irgenetwas.
Ja das ist genau das, was ich oben angesprochen habe. Du hast versuchst einen boolean in eine List<Apartment> hinzuzufügen weil du map verwendet hast..
Ist das Return statement denn gültig? Hast du eine Dokumentation für "return search" ?
Warum sollte es nicht gültig sein? search ist eine Methode die ich selber geschrieben habe .. das ist die letzte Methode in dem Listing
 
K

kneitzel

Hmm, muss ich mir jetzt Sorgen um meine Festanstellung machen? Ist es ein Grund für eine Kündigung, wenn man Predicates im Job verwendet hat?

Ich mache mir jetzt doch ernsthaft Sorgen....

*scnr*
 
K

kneitzel

Hmm ... kein Problem, bis das Projekt mit Codenamen mrBrown diesen Robat in der VM httpDigest soweit hat, dass man nicht selbst entwickeln muss, bin ich in Rente ....
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben