展平嵌套数组。 (JAVA)

我正在努力创建合适的逻辑来压扁arrays。 我基本上想要为嵌套数组中的每个子项复制父行。 嵌套数组的数量可能会有所不同。 我一直在创建Java列表bc我发现它们很容易使用,但对任何解决方案都是开放的。 这个问题的本质是我从一些嵌套的JSON开始,我想将它转换成一个平面的csv加载到数据库表中。 谢谢您的帮助。

例:

[1,2,[A,B,[Cat,Dog]],3] 

我已经将上面创建为List。 每个项目都是字符串或其他列表。

结果:

 [1,2,A,Cat,3], [1,2,A,Dog,3], [1,2,B,Cat,3], [1,2,B,Dog,3] 

这是我到目前为止所拥有的。 显然不行。

 private static List<List> processData(List row, List data, List<List> rowList) { List<List> tempRowList = new ArrayList<List>(); for (Object i : data) { if (i instanceof List) { flattenArray((List) i, row, rowList); } else { for (List r : rowList) { r.add(i.toString()); //add item to all rows } } } return rowList; private static void flattenArray(List arrayObject, List rowToCopy, List<List> rowList) { for (Object x : arrayObject) { if (x instanceof List) { for (List t : rowList) { flattenArray((List) x, t, rowList); } } else { List newRow = new ArrayList(rowToCopy); //copy row List t = new ArrayList(); t.add(x); List<List> innerRowList = new ArrayList<List>(); innerRowList.add(newRow); processData(newRow, t, innerRowList); //pass in new copied row. object to add, rowList.add(newRow); } } rowList.remove(rowToCopy); } 

我把这一切都设置得像这样。

 public static void main(String[] args) { List data = new ArrayList(); List<List> rowList = new ArrayList<List>(); data.add("1"); data.add("2"); List l1 = new ArrayList(); l1.add("A"); l1.add("B"); List l2 = new ArrayList(); l2.add("dog"); l2.add("cat"); l1.add(l2); data.add(l1); data.add("3"); List r0 = new ArrayList(); rowList.add(r0); System.out.println(data); rowList = processData(r0, data, rowList); System.out.println(rowList); } 

我认为如果您使用Java 8,这应该对您有用:

  List a = new ArrayList<>(); List a1 = new ArrayList<>(); a1.add("v"); a1.add("w"); List a2 = new ArrayList<>(); a2.add("ww"); a.add("a"); a.add("b"); a.add("c"); a.add("d"); a.add(a1); a.add(a2); List b = new ArrayList<>(); a.stream().flatMap(x -> x instanceof String ? Stream.of(x) : ((List) x).stream()).forEach(b::add); System.out.println(a); System.out.println(b); 

b列表将包含展平列表。 输出是:

 [a, b, c, d, [v, w], [ww]] [a, b, c, d, v, w, ww]