Ich habe Mühe, die richtige Logik zu erstellen, um ein Array zu glätten. Ich möchte im Wesentlichen Elternzeilen für jedes untergeordnete Element in einem verschachtelten Array duplizieren. Die Anzahl der verschachtelten Arrays kann variieren. Ich habe Java-Listen erstellt. Ich finde es einfach, mit ihnen zu arbeiten, aber offen für jede Lösung. Die Natur dieses Problems ist, dass ich mit etwas verschachteltem JSON anfange, das ich in einen flachen csv umwandeln möchte, um in eine Datenbanktabelle zu laden. Danke für die Hilfe.Verschachtelte Arrays abflachen. (Java)
Beispiel:
[1,2,[A,B,[Cat,Dog]],3]
Ich habe die oben als eine Liste erstellt. Jedes Element ist entweder eine Zeichenfolge oder eine andere Liste.
Ergebnis:
[1,2,A,Cat,3],
[1,2,A,Dog,3],
[1,2,B,Cat,3],
[1,2,B,Dog,3]
Hier ist, was ich bisher haben. Offensichtlich nicht funktioniert.
private static List<List<String>> processData(List<String> row, List<Object> data, List<List<String>> rowList) {
List<List<String>> tempRowList = new ArrayList<List<String>>();
for (Object i : data) {
if (i instanceof List<?>) {
flattenArray((List<Object>) i, row, rowList);
} else {
for (List<String> r : rowList) {
r.add(i.toString()); //add item to all rows
}
}
}
return rowList;
private static void flattenArray(List<Object> arrayObject, List<String> rowToCopy, List<List<String>> rowList) {
for (Object x : arrayObject) {
if (x instanceof List<?>) {
for (List<String> t : rowList) {
flattenArray((List<Object>) x, t, rowList);
}
} else {
List<String> newRow = new ArrayList<String>(rowToCopy); //copy row
List<Object> t = new ArrayList<Object>();
t.add(x);
List<List<String>> innerRowList = new ArrayList<List<String>>();
innerRowList.add(newRow);
processData(newRow, t, innerRowList); //pass in new copied row. object to add,
rowList.add(newRow);
}
}
rowList.remove(rowToCopy);
}
Und ich habe alles so eingerichtet.
public static void main(String[] args) {
List<Object> data = new ArrayList<Object>();
List<List<String>> rowList = new ArrayList<List<String>>();
data.add("1");
data.add("2");
List<Object> l1 = new ArrayList<Object>();
l1.add("A");
l1.add("B");
List<Object> l2 = new ArrayList<Object>();
l2.add("dog");
l2.add("cat");
l1.add(l2);
data.add(l1);
data.add("3");
List<String> r0 = new ArrayList<String>();
rowList.add(r0);
System.out.println(data);
rowList = processData(r0, data, rowList);
System.out.println(rowList);
}
Welchen Code haben Sie geschrieben? Mal sehen? – Ash
ok, habe meinen Code hinzugefügt. Ich habe das Gefühl, dass ich das viel zu kompliziert gemacht habe. – Andrew
Das ist in Ordnung, jetzt können wir helfen, durch welche Probleme Sie gehen – Ash