Inhaltsverzeichnis
Frageninhalt
Workaround
Heim Java Wie kann ich diese beiden Methoden in einer kombinieren?

Wie kann ich diese beiden Methoden in einer kombinieren?

Feb 22, 2024 pm 01:28 PM

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");
Nach dem Login kopieren

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");
Nach dem Login kopieren

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);
      }
   }
}
Nach dem Login kopieren

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);
      }
   }
}
Nach dem Login kopieren

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);
      }
   }
}
Nach dem Login kopieren

Ich habe versucht, Generika zu verwenden

public <t> void maptoarende(list<t> t, list<classa> a){
        ...
           t objtouse = null;
Nach dem Login kopieren

Aber das:

  • Ich kann den Komparator nicht implementieren, weil das nicht funktioniert

    comparator.comparing(t::getfromdat);
    Nach dem Login kopieren
  • Anstelle 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 kopieren
  • Ich 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);
    }
}
Nach dem Login kopieren

Der Aufruf lautet wie folgt:

mapclasstoclassa(b, a, classb::getdate, classa::setclassb);
mapclasstoclassa(c, a, classc::getdate, classa::setclassc);
Nach dem Login kopieren

Dafür gibt es doch Schnittstellen, nicht wahr?

public interface dated {
  localdate getdate();
} 

public class classb implements dated {
  ...
}

public class classc implements dated {
  ...
}
Nach dem Login kopieren

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);
      }
   }
}
Nach dem Login kopieren

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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)