Liste mit generics zurück liefern

Hallo zusammen,

ich habe einige Klassen, die aus einer NodeList Node - Elemente extrahieren. Dies gehscieht immer durch eine Schleife.
Hier mein Code zum einfügen eines Season Objektes:
Java:
NodeList nodeList = Utils.getNodeListFromDocument(document, "seasons");
      
        for (int item = 0; item < nodeList.getLength(); item++) {
            list.add(new Season((Element) nodeList.item(item)));
        }

Hier mein Code zum einfügen eines Result Objektes:
Java:
NodeList nodeList = Utils.getNodeListFromDocument(document, "results");
      
        for (int item = 0; item < nodeList.getLength(); item++) {
            list.add(new Result((Element) nodeList.item(item)));
        }

Wie ihr seht unterscheidet sich die Schleife nur um den Objekt Typen (Season oder Result). Gibt es eine Möglichkeit die For Schleife als Funktion zu extrahieren. Soetwas in dieser Art :
Code:
List<SamsDataObject> getDataObjectList(@NonNull NodeList nodeList, Class className) {
       List<DataObject> dataObjectList = Lists.newArrayList();
   
       for (int item = 0; item < nodeList.getLength(); item++) {
          
           dataObjectList.add(new className((Element) nodeList.item(item)));
       }

Vielen Dank für eure Hilfe
 

VfL_Freak

Top Contributor
Java:
List<SamsDataObject> getDataObjectList(@NonNull NodeList nodeList, Class className) 
{
       List<DataObject> dataObjectList = Lists.newArrayList();
       for (int item = 0; item < nodeList.getLength(); item++) 
      {
           dataObjectList.add(new className((Element) nodeList.item(item)));
      }
}
Die Methode soll List<SamsDataObject> zurückgeben, Du gibt aber List<DataObject> zurück :rolleyes:

Gruß Klaus
 

Joose

Top Contributor
@VfL_Freak er hat ja geschrieben "soetwas in dieser Art" ;)

@perlenfischer1984 ja mit einer generischen Methode könnte man soetwas machen
Java:
    public <M> List<M> getDataObjectList(NodeList nodeList, Class<M> clazz) {
       List<M> dataObjectList = new ArrayList<M>();
       for(int i = 0; i < nodeList.getLength(); i++) {
           try {
               Element e = (Element) nodeList.item(i);
               Constructor<M> constr = clazz.getDeclaredConstructor(e.getClass());
               constr.setAccessible(true);
               M dataObject = constr.newInstance(e);
               dataObjectList.add(dataObject);
           } catch (InstantiationException e) {
               e.printStackTrace();
           } catch (IllegalAccessException e) {
               e.printStackTrace();
           } catch (IllegalArgumentException e) {
               e.printStackTrace();
           } catch (InvocationTargetException e) {
               e.printStackTrace();
           } catch (NoSuchMethodException e) {
               e.printStackTrace();
           } catch (SecurityException e) {
               e.printStackTrace();
           }
       }
       return dataObjectList;
   }
Kann man sicher noch optimieren, aber die Richtung sollte stimmen.
 

Flown

Administrator
Mitarbeiter
Zig Arten gibt es hier wie man das lösen könnte und Reflections ist keine davon!
Java 8 Voodoozeug:
Java:
List<Result> list = getDataObjectList(emptyNodeList, Result::new);
List<Season> list2 = getDataObjectList(emptyNodeList, Season::new);
Mit:
Java:
public <T> List<T> getDataObjectList(NodeList nodeList, Function<Element, T> generator) {
  return IntStream.range(0, nodeList.getLength()).mapToObj(i -> (Element) nodeList.item(i)).map(generator)
      .collect(Collectors.toList());
}

Jetzt mal Pre Java 8 Ära (ich meine < Java 8 wird nicht mal mehr supportet):
Java:
List<Result> list = getDataObjectList(emptyNodeList, new Function<Element, Result>() {
  @Override
  public Result apply(Element e) {
    return new Result(e);
  }
});
List<Season> list2 = getDataObjectList(emptyNodeList, new Function<Element, Season>() {
  @Override
  public Season apply(Element e) {
    return new Season(e);
  }
});
Mit dem Interface Function<T, R>:
Java:
public interface Function<T, R> {
  R apply(T t);
}
Natürlich noch den Code mit der for-Schleife:
Java:
public <T> List<T> getDataObjectList(NodeList nodeList, Function<Element, T> generator) {
  List<T> result = new ArrayList<>();
  for (int i = 0; i < nodeList.getLength(); i++) {
    Element e = (Element) nodeList.item(i);
    result.add(generator.apply(e));
  }
  return result;
}
 
Zuletzt bearbeitet:

Flown

Administrator
Mitarbeiter
@Kababär Das kann und will ich nicht glauben. Mit etwas Übung und kurzes Überlegen würden schon einige auf äquivalente Lösungen kommen.
 

Kababär

Top Contributor
@Flown also ich persönlich tue ich mich schwer damit, gerade was Fuction, Consumer und Supplier angeht. Sehe hier auch wenige Beispiele. Wird Zeit dass ich mich damit befasse :D
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Liste aller Kombintionen mit Einschränkungen Allgemeine Java-Themen 8
TheSepp Wie kann man Leerzeichen aus einer Array liste entfernen? Allgemeine Java-Themen 10
B Liste ändern während Iteration über Diese? Allgemeine Java-Themen 16
D Erste Schritte Liste erweitern Allgemeine Java-Themen 11
sserio Variablen Liste erstellt und ein Problem mit dem Index Allgemeine Java-Themen 6
L allgemein Strings händisch in Liste sortieren Allgemeine Java-Themen 47
M einfach verkettete Liste verstehen Allgemeine Java-Themen 23
Drachenbauer wie kann ich alle instanzen einer Klasse durchsehen, ohne, dass diese in einer Liste erzeugt wurden? Allgemeine Java-Themen 11
Gaudimagspam Skip Liste erstellen in Java Allgemeine Java-Themen 3
G Java Editor Löschen doppelter Zahlen einer Liste Allgemeine Java-Themen 2
bueseb84 Spring Boot Entity mit Liste Allgemeine Java-Themen 4
MiMa Werte in liste speichern? Allgemeine Java-Themen 3
Curtis_MC Collections Liste anhand mehrere Kriterien sortieren Allgemeine Java-Themen 6
K verkettete Liste Allgemeine Java-Themen 3
G Liste (UsageStats) sortieren (Android) Allgemeine Java-Themen 5
T Google Links in einer Liste Allgemeine Java-Themen 4
looparda Liste filtern nach Prädikaten verschiedener Typen Allgemeine Java-Themen 3
OSchriever Einfach verkettete Liste ändern Allgemeine Java-Themen 43
L Liste überschreibt alte Elemte Allgemeine Java-Themen 10
H Länge einer verketteten Liste Allgemeine Java-Themen 4
E Erstellen einer Liste mit einer maximalen Menge an Elementen Allgemeine Java-Themen 13
P Element einer Liste wurde hinzugefügt, aber es gibt keinen Zugriff Allgemeine Java-Themen 2
S Methoden Liste soll Methode aus innerer Klasse aufrufen Allgemeine Java-Themen 4
L Erste Schritte Liste von Datums filter nach Monate Allgemeine Java-Themen 4
Y Liste in Stream Packen Allgemeine Java-Themen 1
K Einfache Verkettete Liste mit Node Allgemeine Java-Themen 3
perlenfischer1984 Reflection : Element in generische Liste hinzufügen Allgemeine Java-Themen 4
S Verkettete (Teil)Liste sortieren ( rekursiv bis n) Allgemeine Java-Themen 2
G Liste zwischen zwei Kalenderdaten erstellen Allgemeine Java-Themen 3
B Wie vergleiche ich Strings in einer Liste? Allgemeine Java-Themen 5
Viktim Threads Liste In unterschiedlichen Threads bearbeiten Allgemeine Java-Themen 23
A Collections Inhalt einer Liste mit Inhalt anderer Liste vergleichen ? Allgemeine Java-Themen 7
I Abstrakte Datentypen - Liste Allgemeine Java-Themen 9
D Datentypen Klassenattribut aus Objekt in generischer Liste Allgemeine Java-Themen 15
P Liste zu Objekt umwandeln Allgemeine Java-Themen 4
Z In die Liste kann ich nichts adden Allgemeine Java-Themen 16
C Liste checken auf MINDESTENS ein Objekt | Bukkit Allgemeine Java-Themen 3
M liste von listen anders ausgeben Allgemeine Java-Themen 1
B Per Buttonklicks einer Liste Wörter hinzufügen - Wie umsetzen? Allgemeine Java-Themen 11
H Liste sortieren anhand optionalem Property Allgemeine Java-Themen 3
L Liste führt sich nicht weiter Allgemeine Java-Themen 5
A Input/Output Liste der Dateien in einem Ordner in einer Jar Datei erhalten Allgemeine Java-Themen 11
J Fragen zu generischer doppelt verketteter Liste (bei fehlendem Grundverständnis) Allgemeine Java-Themen 1
B Prüfen, ob ein Element in der Liste nicht existiert Allgemeine Java-Themen 3
B Klassen JTable mit einer Liste Allgemeine Java-Themen 0
X HTTP Auslesen der Ergebnisse von einer Webseite und in eine Liste packen Allgemeine Java-Themen 1
A Auslesen einer Datei sowie ausgeben als Liste in App Allgemeine Java-Themen 5
E Liste löscht sich selbstständig Allgemeine Java-Themen 5
H Liste von Objekten generisch sortieren Allgemeine Java-Themen 0
D Liste anhand Standardnormalverteilung befüllen Allgemeine Java-Themen 1
M Threads synchroner Zugriff (add/delete/read) auf eine Liste Allgemeine Java-Themen 6
T Datentypen Eine Liste - verschiedenen Klassen - eine Abstracte Klasse Allgemeine Java-Themen 3
M Werte aus DB in Liste speichern ohne mehrfach speicherung Allgemeine Java-Themen 18
G Liste anzahl der gleichen Objekte Allgemeine Java-Themen 6
S Pattern.Match Suche: For Schleife einbinden und in Liste schreiben Allgemeine Java-Themen 3
O aus Liste ein beliebiges Element auswählen Allgemeine Java-Themen 7
J Liste aller Com-Ports - zweistellige Ports? Allgemeine Java-Themen 15
O MVC - wo Liste der ComboBox-Items ermitteln Allgemeine Java-Themen 3
MiMa Liste von Pfaden in eine textArea schreiben Allgemeine Java-Themen 7
K kontinuierlich aktuelle Bestellsystem-Liste mit farbigem Status Allgemeine Java-Themen 2
A Auswählbare Liste Allgemeine Java-Themen 2
D Sortieren von Liste zu unperformant Allgemeine Java-Themen 6
N Liste gesucht Allgemeine Java-Themen 2
Z Sortiertes Einfügen in doppelt verkettete Liste Allgemeine Java-Themen 5
S Probleme beim Auslesen einer Liste Allgemeine Java-Themen 8
O JSON String bauen aus Liste Allgemeine Java-Themen 2
M Über Liste verschiendene JComponents mit eigenem implementierten Interface ansprechen Allgemeine Java-Themen 7
T Hashmap mit geordneter/ungeordneter liste als Value Allgemeine Java-Themen 5
D Zugriff auf Array-Liste Allgemeine Java-Themen 19
S Threads Liste mit Objekten in Teillisten zerlegen und abarbeiten Allgemeine Java-Themen 3
R ThreadPool - vorhandene thread liste überprüfen bzw. aufräumen Allgemeine Java-Themen 3
pg1337 Liste füllen Allgemeine Java-Themen 2
U Große Liste von Strings mit indiziertem Zugriff Allgemeine Java-Themen 31
B Properties File Liste Allgemeine Java-Themen 3
Gossi Collections Liste zusammenfassen für JSP Allgemeine Java-Themen 4
Gossi Collections (Unbekannte) Liste Sortieren Allgemeine Java-Themen 10
T Collections Liste schnell/nebenläufig durchgehen Allgemeine Java-Themen 2
M Objekt aus Liste in Liste suchen/löschen Allgemeine Java-Themen 6
Q "Doppelte" Einträge einer Liste entfernen Allgemeine Java-Themen 14
C Exponentielle Verteilung in einer Liste Allgemeine Java-Themen 7
Nic.o liste der installierten Zertifikate ?! Allgemeine Java-Themen 3
T Liste mit GregorianCalendar-Objekten in List einlesen, mit Collection sortieren und ausgeben Allgemeine Java-Themen 3
M Verständnisfragen bezüglich Liste Allgemeine Java-Themen 3
S AWT Wie bekomme ich eine Liste aller chars in einem Font? Allgemeine Java-Themen 3
J Zeichenketten-Liste filtern Allgemeine Java-Themen 6
S Aus einer Liste<Oberklasse> alle Elemente die eine bestimmte Unterklasse von Oberklasse haben filter Allgemeine Java-Themen 8
K Liste aller implementierenden Klassen einer Oberklasse anzeigen Allgemeine Java-Themen 4
M Eintrag verschwindet aus Liste Allgemeine Java-Themen 3
E Objekte in einer Liste suchen. Allgemeine Java-Themen 4
I Über eine Liste iterieren und Objekte löschen. Wie löst man das sauber? Allgemeine Java-Themen 5
reibi Kopie einer Liste Allgemeine Java-Themen 4
N Liste mit Map abgleichen extrem langsam Allgemeine Java-Themen 6
C Darstellung der Liste bei vielen Daten extrem langsam Allgemeine Java-Themen 11
T Liste sortieren Allgemeine Java-Themen 6
L Objekte in Liste packen Allgemeine Java-Themen 2
N Liste aendern waehrend des iterierens ueber selbige Allgemeine Java-Themen 11
B Datenstruktur: Liste Allgemeine Java-Themen 5
S Liste mit verschiedenden Objekten Allgemeine Java-Themen 15
D Einfach verkettete Liste Allgemeine Java-Themen 3
M Casten von Liste nach Array schlägt fehl?? Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben