raffiSSL
Lt. Junior Grade
- Registriert
- Feb. 2006
- Beiträge
- 289
Hallo,
ich möchte gern mit einer rekursiven Methode einen bestimmten Wert aus einer Liste herauslesen, welcher sich aus einem Input-Wert ergibt. Ganz konkret lese ich mittels smooks eine csv-Datei ein und erstelle damit eine Liste mit Einträgen der Klasse CategoryHierarchy. Diese wiederum hat 2 Werte, cid und cidParent (beide long), welche direkt aus der csv Datei kommen. Dort ist eine, wie der Name schon sagt, baumartige Hierarchie hinterlegt. Und ich möchte für jeden Inhalt den Wurzelknoten wissen (es kann natürlich passieren, das pid == root).
Ich versuche das ganze folgendermaßen, wobei mir immer nur der erste Elternknoten zurückgegeben wird, anstatt den Baum bis ganz nach oben zu wandern:
Im konreten Fall wird mir 1100402 als Wurzel angezeigt. Richtig wäre aber 110 (diesen Wert gibt es nur als cidParent und nie als cid).
Aufbau der CategoryHierarchy-Klasse:
Aufbau der csv:
cid|cidParent
11032|110
11004|110
1100402|11004
110040202|1100402
110040204|1100402
110040206|1100402
...
Ich weis nicht wirklich wo das Problem liegt. Aber ich kann es zumindest eingrenzen, als das es funktioniert, wenn ich eine Liste mit CategoryHierarchy-Instanzen mit manuell eingetragenen Werten anlege. Das Einlesen der csv funtioniert korrekt, was ich am HTML Report sehen kann.
Danke und viele Grüße
ich möchte gern mit einer rekursiven Methode einen bestimmten Wert aus einer Liste herauslesen, welcher sich aus einem Input-Wert ergibt. Ganz konkret lese ich mittels smooks eine csv-Datei ein und erstelle damit eine Liste mit Einträgen der Klasse CategoryHierarchy. Diese wiederum hat 2 Werte, cid und cidParent (beide long), welche direkt aus der csv Datei kommen. Dort ist eine, wie der Name schon sagt, baumartige Hierarchie hinterlegt. Und ich möchte für jeden Inhalt den Wurzelknoten wissen (es kann natürlich passieren, das pid == root).
Ich versuche das ganze folgendermaßen, wobei mir immer nur der erste Elternknoten zurückgegeben wird, anstatt den Baum bis ganz nach oben zu wandern:
Code:
public static void main(String[] args) throws IOException, SAXException {
List<CategoryHierarchy> catHier = Main.runsSmooksTransformCategoryHierarchies();
Long cid = Long.valueOf(110040202);
long root = getRoot(cid, catHier);
System.out.println("Root: "+root);
}
private static long getRoot(Long cid, List<CategoryHierarchy> list) {
for (CategoryHierarchy ch : list) {
Long temp = Long.valueOf(ch.getCid());
if (temp.compareTo(cid) == 0) {
cid = Long.valueOf(ch.getCidParent());
getRoot(cid, list);
}
}
return cid.longValue();
}
Im konreten Fall wird mir 1100402 als Wurzel angezeigt. Richtig wäre aber 110 (diesen Wert gibt es nur als cidParent und nie als cid).
Aufbau der CategoryHierarchy-Klasse:
Code:
public class CategoryHierarchy {
private long cid;
private long cidParent;
...
}
Aufbau der csv:
cid|cidParent
11032|110
11004|110
1100402|11004
110040202|1100402
110040204|1100402
110040206|1100402
...
Ich weis nicht wirklich wo das Problem liegt. Aber ich kann es zumindest eingrenzen, als das es funktioniert, wenn ich eine Liste mit CategoryHierarchy-Instanzen mit manuell eingetragenen Werten anlege. Das Einlesen der csv funtioniert korrekt, was ich am HTML Report sehen kann.
Danke und viele Grüße