所以我有:
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}}
非常感谢你。
您可以使用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()的更多信息。
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
欢迎来到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数组,则在事后将其转换。