Wie kann ich diese beiden Methoden in einer kombinieren?
PHP-Editor Apple beantwortet Ihre Frage in Java: Wie kombiniere ich zwei Methoden zu einer? Bei der Java-Programmierung müssen wir manchmal zwei Methoden zu einer effizienteren Methode zusammenführen, um die Lesbarkeit und Ausführungseffizienz des Codes zu verbessern. Durch die Zusammenführungsmethode kann doppelter Code reduziert, die Programmstruktur vereinfacht und die Wiederverwendbarkeit des Codes verbessert werden. Als Nächstes stellen wir spezifische Betriebsschritte und Vorsichtsmaßnahmen vor, die Ihnen dabei helfen, die Methodenzusammenführung schnell zu implementieren und das Java-Programmdesign zu optimieren.
Frageninhalt
Ich habe zwei sehr ähnliche Methoden. Ich möchte es also auf eine Methode reduzieren, weiß aber nicht wie.
Verwenden Sie es wie folgt:
mapclassbtoclassa("a list o classb objs", "a list of classa objs"); mapclassctoclassa("a list o classc objs", "a list of classa objs");
Ich möchte ändern zu:
mapclasstoclassa("a list o classb objs", "a list of classa objs"); mapclasstoclassa("a list o classc objs", "a list of classa objs");
Methode 1b => a
public void mapclassbtoclassa(list<classb> b, list<classa> a){ comparator<classb> sortfunc = comparator.comparing(classb::getdate); collections.sort(b, sortfunc); for (classa aobj : a){ localdate datea = aobj.getdate(); classb bobjtouse = null; for (classb bobj : b){ localdate dateb = bobj.getdate(); if (dateb.isafter(datea)){ break; } else { bobjtouse = bobj; } } if (bobjtouse != null){ aobj.setclassb(bobjtouse); } } }
Methode 2c => a
public void mapclassctoclassa(list<classc> c, list<classa> a){ comparator<classc> sortfunc = comparator.comparing(classc::getdate); collections.sort(c, sortfunc); for (classa aobj : a){ localdate datea = aobj.getdate(); classc cobjtouse = null; for (classc cobj : c){ localdate datec = cobj.getdate(); if (datec.isafter(datea)){ break; } else { cobjtouse = cobj; } } if (cobjtouse != null){ aobj.setclassc(cobjtouse); } } }
Ich möchte etwas Ähnliches machen:
public void mapclasstoclassa(list< **xx** > t, list<classa> a){ comparator< **xx** > sortfunc = comparator.comparing( **xx** ::getdate); collections.sort( t , sortfunc); for (classa aobj : a){ localdate datea = aobj.getdate(); **xx** objtouse = null; for (**xx** obj : t){ localdate datet = obj.getdate(); if (datet.isafter(datea)){ break; } else { objtouse = bobj; } } if (objtouse != null){ aobj.setclassxxx(objtouse); } } }
Ich habe versucht, Generika zu verwenden
public <t> void maptoarende(list<t> t, list<classa> a){ ... t objtouse = null;
Aber das:
Ich kann den Komparator nicht implementieren, weil das nicht funktioniert
comparator.comparing(t::getfromdat);
Nach dem Login kopierenAnstelle eines Aufrufs von obj.getdate() habe ich hier eine Lösung mithilfe von Reflektion gefunden, aber die Leute raten davon ab. Aber es funktioniert. was mache ich?
Method m = obj.getClass().getMethod("getDate"); LocalDate dateT = (LocalDate) m.invoke(obj);
Nach dem Login kopierenIch weiß nicht, wie man aobj.setclassxxx() aufruft, da die Methodennamen von classb und classc unterschiedlich sind
Ich habe über Lambdas gelesen, habe aber Schwierigkeiten zu verstehen, wie man sie verwendet.
Workaround
Wenn Sie diesen Klassen keine gemeinsame Schnittstelle hinzufügen können, können Sie den Methodenparametern einige Funktionen hinzufügen:
public <t> void mapclasstoclassa(list<t> t, list<classa> a, function<t, localdate> dategetter, biconsumer<classa, t> setter) { comparator<t> sortfunc = comparator.comparing(dategetter); collections.sort(t, sortfunc); for (classa aobj : a) { localdate datea = aobj.getdate(); t ttouse = null; for (t tobj : t){ localdate datet = dategetter.apply(tobj); if (datet.isafter(datea)){ break; } ttouse = tobj; } setter.accept(aobj, tobjtouse); } }
Der Aufruf lautet wie folgt:
mapclasstoclassa(b, a, classb::getdate, classa::setclassb); mapclasstoclassa(c, a, classc::getdate, classa::setclassc);
Dafür gibt es doch Schnittstellen, nicht wahr?
public interface dated { localdate getdate(); } public class classb implements dated { ... } public class classc implements dated { ... }
Für Setter können Sie instanceof
verwenden.
public void mapClassBToClassA(List<? extends Dated> b, List<ClassA> a){ Comparator<Dated> sortFunc = Comparator.comparing(Dated::getDate); Collections.sort(b, sortFunc); for (ClassA aObj : a){ LocalDate dateA = aObj.getDate(); Dated datedToUse = null; for (Dated bObj : b){ LocalDate dateB = bObj.getDate(); if (dateB.isAfter(dateA)){ break; } else { datedToUse = bObj; } } if (datedToUse instanceOf ClassB bObjToUse) { aObj.setClassB(bObjToUse); } else if (datedToUse instanceOf ClassC cObjToUse) { aObj.setClassC(cObjToUse); } } }
Das obige ist der detaillierte Inhalt vonWie kann ich diese beiden Methoden in einer kombinieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)
