java如何將map數(shù)據(jù)存入到實(shí)體類對(duì)象中
更新時(shí)間:2024年09月23日 09:29:53 作者:??悲宸???
在Java編程中,經(jīng)常需要將Map集合中的數(shù)據(jù)轉(zhuǎn)換為實(shí)體類對(duì)象,這可以通過反射機(jī)制實(shí)現(xiàn),即通過遍歷Map對(duì)象,使用反射根據(jù)鍵名對(duì)應(yīng)實(shí)體類的屬性名,動(dòng)態(tài)調(diào)用setter方法將值設(shè)置到實(shí)體對(duì)象中,這樣的操作使得數(shù)據(jù)從Map結(jié)構(gòu)轉(zhuǎn)移到了具體的JavaBean中,便于后續(xù)的操作和管理
將map數(shù)據(jù)存入到實(shí)體類對(duì)象中
實(shí)體類代碼
(這里我們創(chuàng)建的User實(shí)體類)
public class User {
//實(shí)體類屬性
private String name;
private String psw;
private String email;
private String tel;
//1,toString方法
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", psw='" + psw + '\'' +
", email='" + email + '\'' +
", tel='" + tel + '\'' +
'}';
}
//2,構(gòu)造方法(無參構(gòu)造,有參構(gòu)造)
public User() {
}
public User(String name, String psw, String email, String tel) {
this.name = name;
this.psw = psw;
this.email = email;
this.tel = tel;
}
//3,getter setter方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPsw() {
return psw;
}
public void setPsw(String psw) {
this.psw = psw;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
}
測(cè)試類代碼
@Test //這里我用的是單元測(cè)試方法,比較方便
public void test1(){
HashMap<String, Object> map = new HashMap<>();
map.put("name","貂蟬");
map.put("psw","666");
map.put("email","123456789@qq.com");
map.put("tel","123456789");
//調(diào)用方法
User user = mapToBean(map, User.class);
System.out.println(user);
}
//將map中的鍵值對(duì),封裝進(jìn)實(shí)體對(duì)象屬性中
public <T> T mapToBean( HashMap<String, Object> map,Class<T> c){
// <T> T 這里不確定返回值類型,寫一個(gè)泛型類型,作為返回值
// HashMap<String, Object> map,Class<T> c
// 這里在方法中傳兩個(gè)參數(shù),一個(gè)是map集合,另一個(gè)是實(shí)體類,
// 但是實(shí)體類不確定,會(huì)一直變動(dòng),所以傳遞一個(gè)Class類作為參數(shù)類型,可以拿到所有的實(shí)體類
try {
T t = c.newInstance(); //拿到實(shí)體類對(duì)象
//1,拆開map,給對(duì)象t的屬性賦值
Set<Map.Entry<String, Object>> entries = map.entrySet();
for (Map.Entry<String, Object> entry : entries) {
Field f = c.getDeclaredField(entry.getKey());
f.setAccessible(true); //設(shè)置修改權(quán)限,因?yàn)槲覀儾捎玫姆庋bprivate,不修改權(quán)限的話,就不能修改實(shí)體類中的屬性值
f.set(t,entry.getValue()); //傳遞參數(shù),第一個(gè)為實(shí)體類對(duì)象,第二個(gè)為map集合中的value值
}
//2,構(gòu)建一個(gè)實(shí)體對(duì)象并返回
return t;
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("出錯(cuò)啦!"); //將異常放大,可不用寫返回值
}
}運(yùn)行效果

如果你創(chuàng)建的不是User實(shí)體類,將下面代碼改成你的實(shí)體類,map集合中的數(shù)據(jù)改成你想要的數(shù)據(jù),就可以了

總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
application.yml和bootstrap.yml不生效的3種解決方案
SpringBoot默認(rèn)支持?properties(.properties) 和 YAML(.yml .yaml ) 配置文件,本文主要介紹了application.yml和bootstrap.yml不生效的3種解決方案,具有一定的參考價(jià)值,感興趣的可以了解一下2024-03-03
小議Java中final關(guān)鍵字使用時(shí)的注意點(diǎn)
final關(guān)鍵字代表著最后、不可改變,無論是在用final修飾類、修飾方法還是修飾變量時(shí),都要注意內(nèi)存分配的問題.這里來小議Java中final關(guān)鍵字使用時(shí)的注意點(diǎn):2016-06-06
SpringCloud集成zookeeper實(shí)現(xiàn)服務(wù)注冊(cè)并訪問功能
zookeeper和eureka一樣,是用于充當(dāng)服務(wù)注冊(cè)功能服務(wù)器的一個(gè)springcloud插件,這篇文章主要介紹了SpringCloud集成zookeeper實(shí)現(xiàn)服務(wù)注冊(cè)并訪問,需要的朋友可以參考下2022-06-06
java仿Servlet生成驗(yàn)證碼實(shí)例詳解
這篇文章主要介紹了java仿Servlet生成驗(yàn)證碼實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-04-04

