如何在java中将多维列表转换为多维数组?

如何在java中将多维列表转换为多维数组?,java,Java,我有一个包含数组列表的列表,我希望将其转换为多维数组: /* The logs looks something like this [Name: Foo, From: Somewhere, To: Somewhere] [Name: Foo1, From: Somewhere1, To: Somewhere1] [Name: Foo2, From: Somewhere2, To: Somewhere2] ... */ public static void main(String[] args)

我有一个包含数组列表的列表,我希望将其转换为多维数组:

/*
The logs looks something like this
[Name: Foo, From: Somewhere, To: Somewhere]
[Name: Foo1, From: Somewhere1, To: Somewhere1]
[Name: Foo2, From: Somewhere2, To: Somewhere2]
...
*/

public static void main(String[] args) {
    List<ArrayList<String>> items = new ArrayList<>();

    for (String logs : Reader.read(App.purchaseLog, true) /* helper method */) {
    String[] singleLog = convert(logs); /* helper method */

    items.add(new ArrayList<String>());

    for (String data : singleLog) {
        String removeBrackets = data.replaceAll("\\[", "").replaceAll("\\]", "");

        String[] splitSingleLog = convert(removeBrackets.split(","));
        for (String element : splitSingleLog) {
            String trimmedData = element.trim();
            items.get(0).add(trimmedData.substring(trimmedData.indexOf(':') + 2, trimmedData.length()));
        }
    }
}

   // But then how can i convert it to normal 2 dimensional array?
   // i am expecting it to be like this
   String[][] data = {
       {"Foo", "Somewhere", "Somewhere"},
       {"Foo1", "Somewhere1", "Somewhere1"},
       {"Foo2", "Somewhere2", "Somewhere2"}
   };
}

public static String[] convert(String... array) {
    return array;
}
/*
日志看起来像这样
[姓名:Foo,发件人:某地,收件人:某地]
[名称:Foo1,From:somewhere 1,To:somewhere 1]
[名称:Foo2,From:somewhere 2,To:somewhere 2]
...
*/
公共静态void main(字符串[]args){

列表)

您似乎不明白多维数组在Java中是如何工作的。它们不是真实的矩阵。数组的数组…意味着:包含另一个一维数组的一维数组

只需将您的
列表
转换为
任意[]
;然后您就可以执行以下操作:

Whatever[][] twodim = { row1, row2 };
List<List<X>> listOfList = ...;

List<X[]> listOfArray a = new ArrayList<X[]>();
for (List<X> listOfXx : listOfList) listOfArray.add(listOfX.toArray(new X[0])); // fill with arrays (from inner lists)

X[][] arrayOfArray = listOfArray.toArray(new X[0][0]);
或动态:

Whatever[][] twodim = new Whatever[numberOfRows][];
twodim[0] = row1;
twodim[1] = row2;
...
因此,将
列表
转换为二维数组的工作原理如下:

List<List<String>> theStrings ... coming from somewhere
String[][] stringsAsArray = new String[theStrings.length][];
for (int i=0; i<theStrings.length;i++) {
  List<String> aList = theStrings.get(i);
  stringsAsArray[i] = aList.toArray(new String[aList.size()]);
}
列出来自某处的字符串
字符串[][]字符串数组=新字符串[theStrings.length]];

对于(int i=0;i您需要两个步骤,首先将
列表
转换为
列表
,然后转换为
X[][]
。类似于:

Whatever[][] twodim = { row1, row2 };
List<List<X>> listOfList = ...;

List<X[]> listOfArray a = new ArrayList<X[]>();
for (List<X> listOfXx : listOfList) listOfArray.add(listOfX.toArray(new X[0])); // fill with arrays (from inner lists)

X[][] arrayOfArray = listOfArray.toArray(new X[0][0]);
列表列表列表=。。。;
List listOfArray a=新的ArrayList();
对于(listOfXx:listOfList)listOfArray.add(listOfX.toArray(新的X[0]);//使用数组填充(从内部列表)
X[][]阵列法拉利=listOfArray.toArray(新的X[0][0]);

谁投了反对票并要求关闭?这个问题完全在SO的范围内。@Jean BaptisteYunès显然我没有投反对票,关闭请求:但是…最后,这个问题实际上是关于基本问题。其他用户更愿意关闭这个问题并不奇怪。我没有为此向你收费……即使是基本问题也应该是answe红色,特别是对初学者。@Jean BaptisteYunès我希望我不是出于防御,我只是想解释一下。请记住:在第一页,它说Stack Overflow是一个面向专业和热心程序员的问答网站。与流行观点相反,这不是一个面向绝对新手的网站这要求绝对的基础。除此之外:投票的一个想法是表达一个问题的“先前研究”的水平。长话短说:事情并没有那么容易。我得到了java.lang.ClassCastException:[Ljava.lang.Object;无法转换为[Ljava.lang.StringYes在转换过程中需要稍微修改…完成。应该使用泛型转换。您可能无法避免这种情况,如果您使用的库需要一个2D字符串数组,那么您可能需要将自己的结构转换为所请求的结构。因此,您的答案无法回答原始问题。我不希望OP删除“他接受了,但你的回答没有解释如何将列表列表转换为2D数组。”Jean BaptisteYunès OK,也在我的回答中添加了这一部分。