HashMap转对象工具

本文介绍如何使用HashMap高效地转换为Java对象,探讨相关工具的实现原理和使用方法,帮助开发者提升代码效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HashMap转对象工具

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

public class MapToObject {
	public static void main(String[] args) throws Exception {
		Map<String, Object> mapData = new HashMap<String, Object>();
		mapData.put("age", 20);
		mapData.put("name", "张三");
		Hobby m = new MapToObject().new Hobby();
		m.setDesc("书");
		m.setID(1);
		Hobby n = new MapToObject().new Hobby();
		n.setDesc("画");
		n.setID(2);
		ArrayList<Hobby> hobby = new ArrayList<Hobby>();
		hobby.add(m);
		hobby.add(n);
		mapData.put("hobby", hobby);
		TestData data = prepareRes(mapData);
		System.out.println(data.getName()+"  "+data.getAge()+" "+data.getHobby());
		
	}

	protected static TestData prepareRes(Map<String, Object> responseData) throws Exception {
		Class cls = TestData.class;
//		/TestData response = (TestData) cls.newInstance();
		TestData td = new MapToObject(). new TestData();
		while (!cls.equals(Object.class)) {
			Field[] fields = cls.getDeclaredFields();
			for (Field field : fields) {
				field.setAccessible(true);
				Iterator<Map.Entry<String, Object>> it = responseData.entrySet().iterator();
				while (it.hasNext()) {
					Map.Entry<String, Object> entry = (Map.Entry<String, Object>) it.next();
					if (((String) entry.getKey()).equalsIgnoreCase(field.getName())) {
						field.set(td, entry.getValue());
						it.remove();
						break;
					}
				}
				
			}
			cls = cls.getSuperclass();
		}
		return td;
	}
	 class TestData{
		private String name;
		private int  age;
		private ArrayList<Hobby> hobby;
		TestData(){}
		public String getName() {
			return name;
		}
		public void setName(String name) {
			this.name = name;
		}
		public int getAge() {
			return age;
		}
		public void setAge(int age) {
			this.age = age;
		}
		public ArrayList<Hobby> getHobby() {
			return hobby;
		}
		public void setHobby(ArrayList<Hobby> hobby) {
			this.hobby = hobby;
		}
		
	}
	 class Hobby {
		private int ID ;
		private String  desc;
		Hobby(){}
		public int getID() {
			return ID;
		}
		public void setID(int iD) {
			ID = iD;
		}
		public String getDesc() {
			return desc;
		}
		public void setDesc(String desc) {
			this.desc = desc;
		}
		

	}


}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值