首先介绍List的toArray方法,他把list转化成object数组。
List list = new ArrayList();
list.add(new Long(1));list.add(new Long(2));
//Long[] l = (Long[])list.toArray();这里会报错,因为list.toArray()返回的是Object[],不能直接强转成Long型,应该成下面这行
Long [] l = (Long []) list.toArray(new Long[list.size()]);①
① 也可以改成 Object[] o = list.toArray(); for(int i=0;i<o.length;i++){
l[i] = (Long)o[i];
}
把list转换成二维数组,如下:
List list = new ArrayList();
String[] str1 = {"a","1"};
String[] str2 = {"b","2"};
list.add(str1);
list.add(str2);
Object[] s = (Object[])list.toArray();
String[][] aa = new String[s.length][];
int j=0;
for(int i=0;i<s.length;i++){
aa[i] = (String[])s[i];
}
//输出二维数组的值
for(int z=0;z<aa.length;z++){
for(int i=0;i<aa[z].length;i++){
System.out.println(aa[z][i]);
}
}
这里是最简单的情况,List中的每一条是一个String[]数组,但是如果List是从数据库中查出的话,List中的每一条是一个Object[]数组,上述中的aa[i] = (String[])s[i];就会Object数组无法转换成String数组的错误。故不能用list.toArray这种方法,只能一个一个赋值。例:
从SQL语句得到的数据库的数据集存到二维数组里:CODE,NAMES值分别为001,zy这种
String sql = "select CODE,NAMES from sims_dd_dict where pid=92";
效果如:
List list = new ArrayList();
Object[] str1 = {"a","1"};
Object[] str2 = {"b","2"};
list.add(str1);
list.add(str2);
String[][] str = new String[list.size()][];
for(int i=0;i<list.size();i++){
Object[] s = (Object[])list.get(i);
str[i] = new String[s.length];
for(int j=0;j<s.length;j++){
str[i][j] = s[j].toString();
}
}
如果去数据库取结果集用的是jdbcTemplate.queryForList,那么它每一行返回的是Map而非Object[],故需要换一种形式转化成二维数组,如下:
List result = jdbcTemplate.queryForList(sql);
String[][] z = new String[result.size()][];
for(int i=0;i<z.length;i++){
Map m = (Map)result.get(i);
z[i] = new String[2]; //(1)
Set set = m.keySet(); //(3)
Iterator it =set.iterator();
for(int j=0;it.hasNext();j++){
// System.out.println((String)m.get(it.next())); //(2)
z[i][0] = (String)it.next();
z[i][1] = (String)m.get(z[i][0]);
}
}
必须要有(1),如果不设置的话在 z[i][j]=(String)m.get(it.next()); 处会报错,因为最开始初始化时未给第二维定义长度
如果想打印长度的话可以String str=(String)m.get(it.next()); System.out.println(str); z[i][j]=str;
如果用(2)的话会造成每行结果it.next()两次
通过(3)得到Map中所有的键,然后通过m.get(it.next());得到值,放入数组中。
另:如果sql为 select count(*) from A 的话,那么list.get(0)得到的是一个java.math.BigInteger型,需要String.valueOf()转换一下,如果sql为select name from A ,只选一个字段的话,那么每个list.get(i)是一个Object对象,如果选两个字段的话为Object[]数组