ArrayList<T>数组转换为二维数组

因为项目需求,需要将一个List<T>泛型对象转换成二维数组,如,一个将一个List<Medicine>转换为一个二维数组。

 

1.首先看测试类吧:

package com.bzjm.test;

import java.util.ArrayList;
import java.util.List;

import com.bzjm.dao.MedicineDAO;
import com.bzjm.pojo.Medicine;
import com.zml.utils.DataUtils;

/**
 * @author zml2015
 * @Time:2016年1月30日 下午8:35:39
 * @version 1.0
 */
public class TestDao {

	public static void main(String[] args) {
		MedicineDAO medicineDAO=new MedicineDAO();
//		List<Medicine> list=medicineDAO.querysuitability("123");
		List<Medicine> list =getList();
		
		String string[] =list.get(0).toString().split(",");
		System.out.println("Medicine对象转换为字符串:"+list.get(0).toString());
		System.out.println("二维数组的第二维的大小:"+string.length);
		
		Object [][]o=DataUtils.toArray(list);
		
		for(int i = 0;i<list.size();i++ ){
			for(int j =i; j<string.length;j++){
				System.out.println(o[i][j]);
			}
		}
	
	}

	
	
	public static List<Medicine> getList(){
		List<Medicine> list = new ArrayList<Medicine>();
		
		for (int i = 0; i < 3; i++) {
			Medicine medicine =  new Medicine();
			medicine.setMid(i);
			medicine.setMname("mname:"+i);
			medicine.setMattention("mattention:"+i);
			medicine.setMingredient("mingredient:"+i);
			medicine.setMnoEffect("mnoEffect:"+i);
			medicine.setMprice("mprice:"+i);
			medicine.setMsuitability("msuitability:"+i);
			medicine.setMusage("musage:"+i);
			list.add(medicine);
			
		}
		return list;
		
	}
}


可以看到,list.get(0).toString()中数据的字段是由逗号隔开的,我们则可以通过split(",")将其分割为一个数组,然后获取数组的长度,就知道Medicine这个对象一共有几个成员变量了,拿到这个值,在动态分配二维数组空间的时候,就可以进行动态分配了

 

2.List《Medicine》转换为二维数组的工具类

 

package com.zml.utils;

import java.util.List;

import com.bzjm.pojo.Medicine;
import com.google.gson.reflect.TypeToken;

/**
 * @author zml2015
 * @Time:2016年2月8日 上午10:53:33
 * @version 1.0
 */
public class DataUtils {

	public DataUtils() {
		// TODO Auto-generated constructor stub
	}
	public static <T> Object[][]  toArray(List<T> data){
//data.get(0).toString().split(",").length相信大家应该可以理解的,这个是二维数组第二维的大小,如果不填写,则会报空指针的错误;
//如果填写具体值 的话,就不能起到动态加载的作用了,这个值不应该是固定的,应该是可变的。
//动态分配一个二维数组的
		Object[][] o=new Object[data.size()][data.get(0).toString().split(",").length];
		for (int i = 0; i < data.size(); i++) {
			Medicine medicine=(Medicine) data.get(i);
			o[i][0]=medicine.getMid();
			o[i][1]=medicine.getMname();
			o[i][2]=medicine.getMingredient();
			o[i][3]=medicine.getMsuitability();
			o[i][4]=medicine.getMusage();
			o[i][5]=medicine.getMnoEffect();
			o[i][6]=medicine.getMattention();
			o[i][7]=medicine.getMprice();
			
			
		}
		return o;
	}
	

}

(本想致力于实现一个通用工具类,但是没想到更好的办法,如果读者有更好的办法可以实现通用List<T>转换为二维数组的话,请留言回复哦,虽然有一种方法可能比较麻烦可以实现,但希望大神能拿出更简洁更好的方法。)


3.Medicine类

package com.bzjm.pojo;

/**
 * Medicine entity. @author MyEclipse Persistence Tools
 */


/**
 * @author zml2015
 * @Time:2016年1月30日 下午7:07:43
 * @version 1.0  
 */
public class Medicine implements java.io.Serializable {

	// Fields

	private Integer mid;
	private String mname;
	private String mingredient;//成分
	private String msuitability;//适用性
	private String musage;//适用,用法
	private String mnoEffect;
	private String mattention;//注意事项
	private String mprice;

	// Constructors

	/** default constructor */
	public Medicine() {
	}

	/** full constructor */
	public Medicine(String mname, String mingredient, String msuitability,
			String musage, String mnoEffect, String mattention, String mprice) {
		this.mname = mname;
		this.mingredient = mingredient;
		this.msuitability = msuitability;
		this.musage = musage;
		this.mnoEffect = mnoEffect;
		this.mattention = mattention;
		this.mprice = mprice;
	}

	// Property accessors

	public Integer getMid() {
		return this.mid;
	}

	public void setMid(Integer mid) {
		this.mid = mid;
	}

	public String getMname() {
		return this.mname;
	}

	public void setMname(String mname) {
		this.mname = mname;
	}

	public String getMingredient() {
		return this.mingredient;
	}

	public void setMingredient(String mingredient) {
		this.mingredient = mingredient;
	}

	public String getMsuitability() {
		return this.msuitability;
	}

	public void setMsuitability(String msuitability) {
		this.msuitability = msuitability;
	}

	public String getMusage() {
		return this.musage;
	}

	public void setMusage(String musage) {
		this.musage = musage;
	}

	public String getMnoEffect() {
		return this.mnoEffect;
	}

	public void setMnoEffect(String mnoEffect) {
		this.mnoEffect = mnoEffect;
	}

	public String getMattention() {
		return this.mattention;
	}

	public void setMattention(String mattention) {
		this.mattention = mattention;
	}

	public String getMprice() {
		return this.mprice;
	}

	public void setMprice(String mprice) {
		this.mprice = mprice;
	}

	/* (non-Javadoc)
	 * @see java.lang.Object#toString()
	 */
	@Override
	public String toString() {
		return "Medicine [mid=" + mid + ", mname=" + mname + ", mingredient="
				+ mingredient + ", msuitability=" + msuitability + ", musage="
				+ musage + ", mnoEffect=" + mnoEffect + ", mattention="
				+ mattention + ", mprice=" + mprice + "]";
	}

}

如果,您认为这篇博客让您有些收获,不妨点击一下【】。

如果,您希望更容易地发现我的新博客,不妨点击一下【加关注】。

因为,我的热情需要您的肯定和支持。 

感谢您的阅读,如果文章中有错误或者您有什么好的建议,也欢迎您直接留言批评指教。Thanks,friends!


 

 

 

 

 

 

 
  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值