![](/img/trans.png)
[英]Converting Scala List[List[Double]] to Java double[][]
[英]Converting a List to Double[][]
使用下面的代码,我试图将Doubles列表转换为Double [] []。 但是在方法上: Double[][] dim = list1.toArray(new Double[2][2]);
我收到此错误:
Exception in thread "main" java.lang.ArrayStoreException
at java.lang.System.arraycopy(Native Method)
at java.util.ArrayList.toArray(ArrayList.java:361)
at clustering.main.ConvertArrayTest.main(ConvertArrayTest.java:22)
该行发生错误:
Double[][] dim = list1.toArray(new Double[2][2]);
我如何无法正确转换列表?
编码 :
import java.util.ArrayList;
import java.util.List;
public class ConvertArrayTest {
public static void main(String args[]){
List<ArrayList<Double>> list1 = new ArrayList<ArrayList<Double>>();
ArrayList<Double> list2 = new ArrayList<Double>();
list2.add(1.0);
list2.add(1.0);
list1.add(list2);
list2 = new ArrayList<Double>();
list2.add(2.0);
list2.add(2.0);
list1.add(list2);
Double[][] dim = list1.toArray(new Double[2][2]);
}
}
因为list1
是一个列表列表,所以当您调用toArray
,您将获得一个列表数组。 您需要遍历它,分别转换每个内部列表。
固定主方法在这里:
public static void main(String args[]){
List<ArrayList<Double>> list1 = new ArrayList<ArrayList<Double>>();
ArrayList<Double> list2 = new ArrayList<Double>();
list2.add(1.0);
list2.add(1.0);
list1.add(list2);
list2 = new ArrayList<Double>();
list2.add(2.0);
list2.add(2.0);
list1.add(list2);
Double[][] dim = new Double[2][2];
int i = 0;
for(ArrayList<Double> inner : list1)
dim[i++] = inner.toArray(new Double[0]);
}
您的第一个列表是数组列表的列表,因此您需要对其进行迭代。
我可能会创建这样的方法-
public static Double[][] toDoubleArrayArray(
List<ArrayList<Double>> al) {
if (al == null) { // return null on null.
return null;
}
Double[][] ret = new Double[al.size()][]; // declare the return array array.
for (int i = 0; i < al.size(); i++) {
ArrayList<Double> list = al.get(i); // get the inner list.
if (list == null) { // handle null.
ret[i] = null;
} else {
Double[] inner = new Double[list.size()]; // make the inner list an array.
ret[i] = list.toArray(inner); // store that array.
}
}
return ret; // return
}
然后我像这样测试
public static void main(String[] args) {
List<ArrayList<Double>> list1 = new ArrayList<ArrayList<Double>>();
list1.add(new ArrayList<Double>(Arrays.asList(1.0, 1.0)));
list1.add(new ArrayList<Double>(Arrays.asList(2.0, 2.0)));
Double[][] arr = toDoubleArrayArray(list1);
for (int i = 0; i < arr.length; i++) {
System.out.println(Arrays.toString(arr[i]));
}
}
哪个输出预期
[1.0, 1.0]
[2.0, 2.0]
使用这种方式:
代码 :
public static void main(String[] args) {
List<Double[]> list = new ArrayList<Double[]>();
list.add(new Double[] { 1.0 });
list.add(new Double[] { 2.0, 2.0 });
list.add(new Double[] { 3.0, 3.0, 3.0 });
Double[][] array = list.toArray(new Double[list.size()][]);
for (Double[] numbers : array) {
System.out.println(Arrays.toString(numbers));
}
}
输出 :
[1.0]
[2.0, 2.0]
[3.0, 3.0, 3.0]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.