把List转换成二维数组

 

    首先介绍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[]数组

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值