当前位置: 首页 > 知识库问答 >
问题:

将ArrayList转换为包含不同长度数组的2D数组

卜鹏
2023-03-14

所以我有:

ArrayList<ArrayList<String>> 

其中包含x个数组列表,其中包含另一个y个字符串...演示:

Index 0:
  String 1
  String 2
  String 3
Index 1:
  String 4
Index 2:
Index 3:
  String 5
  String 6

其中index是指包含字符串的数组索引。

如何将其转换为2D数组,该数组如下所示:

{{String1, String2, String3},{String4}, {}, {String5, String6}}

非常感谢你。

共有3个答案

燕和裕
2023-03-14

您可以使用toArray()方法将ArrayList转换为数组。由于ArrayList中有ArrayList,因此您需要遍历每个元素并应用此方法。

类似这样:-

ArrayList<ArrayList<String>> mainList = new ArrayList<ArrayList<String>>();
// populate this list here
//more code

// convert to an array of ArrayLists
ArrayList<String[]> tempList = new ArrayList<String[]>();
for (ArrayList<String> stringList : mainList){
    tempList.add((String[])stringList.toArray());
}

//Convert to array of arrays - 2D array
String [][]list = (String[][])tempList.toArray();

您可以在此处找到有关toArray()的更多信息。

彭宏义
2023-03-14
String[][] array = new String[arrayList.size()][];
for (int i = 0; i < arrayList.size(); i++) {
    ArrayList<String> row = arrayList.get(i);
    array[i] = row.toArray(new String[row.size()]);
}

其中arrayList是您的ArrayList

郎建章
2023-03-14

欢迎来到Java 8的世界!

我只花了一整晚没有睡觉就学会了写这一行奇怪的代码需要什么。我肯定它已经在那里的某个地方,但我找不到它。所以我分享我的研究时间,享受。胡特!

假设:

ArrayList<ArrayList<String>> mainList = new ArrayList<ArrayList<String>>();
// populate this list here

(或者,在Java 8中:

ArrayList<ArrayList<String>> mainList = new ArrayList();
//Populate

)

那么你所需要的就是:

String[][] stringArray = mainList.stream().map(u -> u.toArray(new String[0])).toArray(String[][]::new);

砰!一行。

我不确定它与其他选项相比有多快。但它是这样工作的:

>

  • 获取主列表的流。这个流有点像一个向量,与LinkedList相连,他们有了一个孩子。那孩子后来服用了NZT-48。我离题了<代码>主列表。stream()正在返回数组列表的流

    调用<代码>。映射该流上的函数,该函数将返回一个新流,其内容与传递到映射中的参数指定的新类型相匹配。这个映射函数将为我们隐藏流中的每个元素。它有一个内置的foreach语句。为了实现这一点;map函数将lambda表达式作为其参数。Lambda表达式类似于简单的内联单行函数。它有两种数据类型。首先是调用它的流中的数据类型(mainList.stream())。下一种类型是它将映射到的数据类型,位于lambda表达式的右半部分:u-

    因此,我们只需要在新的字符串数组流上调用toArray。但是在Stream上调用toArray

    现在我们从main List流中获得了正确运行的toArray。我们可以很容易地将其转储到局部变量中:String[][]stringArray=main List.stream....

    现在,我知道你们中的一些人要去那里。“这不适用于ints!”就像我的情况一样。然而,它确实适用于“Ents”,见上文。但是,如果您想从整数的2D数组列表(即数组列表)中得到2D基元int

    int[][] intArray = mainList.stream().map(  u  ->  u.stream().mapToInt(i->i).toArray()  ).toArray(int[][]::new);
    

    为了便于阅读,我试着把它隔开。但你们可以看到,我们必须再次经历同样的映射过程。这次我们不能简单地在ArrayList上调用数组;与上述示例相同。在这里,我们在一个流上调用数组,而不是在一个数组列表上。因此,出于某种原因,我们不必通过“类型”,我认为这是服用脑类固醇。因此,我们可以选择默认选项;在这里,我们点击了NZT-48,并找出了这个[运行]时间对我们来说显而易见的。我不知道为什么它不能在上面的例子中这样做。哦,没错。。。。ArrayList不像Streams那样接受NZT-48。等待我到底在说什么?

    Annnyhoow,因为溪流太聪明了。像谢尔顿一样,我们需要一个全新的协议来处理这些问题。显然,高级智能并不总是意味着容易处理。因此,需要这种新的映射到(mapToInt)来生成一个新的流(Stream),我们可以将它的智能映射到数组(array)。和<代码>i-

    嗯,我红了眼睛,半昏迷半睡着了。我可能犯了一些错误;请把它们拖出来,这样我就可以修复它们,如果有更好的方法,请告诉我!

    PT

  •  类似资料:
    • 问题内容: 所以我有: 其中包含x个ArrayList,其中包含另一个y个String。 其中index指的是包含字符串的数组索引。 如何将其转换为二维数组,如下所示: 非常感谢。 问题答案: 您的位置在哪里(或任何位置,请相应地更改循环内的第一行)

    • 问题内容: 在Java中,如何将ArrayList转换为二维数组Object [] []? 从评论中:我将用更多细节向您描述问题:XML文件包含联系人列表(例如姓名,地址…)。我可以获得此信息的唯一方法是通过ArrayList,该列表将提供给我。由于需要将该数组列表的内容以有序方式存储在Java Swing表中,因此我正在考虑将其转换为对象的二维数组 问题答案: 知道每个联系人具有的属性数量,我设

    • 问题内容: 我正在尝试使用以下代码将包含Integer对象的ArrayList转换为原始int [],但它会引发编译时错误。是否可以用Java进行转换? 问题答案: 你可以进行转换,但是我认为没有内置的功能可以自动进行转换: (请注意,如果其中一个或任何一个元素为,则会抛出。) 编辑:根据评论,你可能希望使用列表迭代器来避免诸如:

    • 问题内容: 我有不同长度的清单清单(例如),并想将其转换成整数数组。我了解多维数组中的“子”数组必须具有相同的长度。那么将上述示例中的列表转换成这样的数组(即用零完成)的最有效方法是什么? 问题答案: 您可以使用np.zeros创建一个numpy数组,并用列表元素填充它们,如下所示。 结果是

    • 问题内容: 我在一个一维数组中有一个例子。它只会输出列。我的想法是使用2d数组选择行和列。这是我的代码: myfile.csv 输出: 名字蒂姆汤姆 问题答案: 我只是将split结果()添加到a中,如果您确实希望将其作为2d数组,则在事后将其转换。