Java利用反射對(duì)list對(duì)象做過(guò)濾
?反射對(duì)效率有影響 慎用?。?!?
1.對(duì)象結(jié)構(gòu)
public class BusinessDept { private String year;//年 private String month;//月 private String deptName;//部門(mén)名稱(chēng) private String deptLeader;//部門(mén)負(fù)責(zé)人 private Double jyz; //經(jīng)營(yíng)值 private Double rev; //收入 private Double exp; //支出 private Double tWorkTime; //填報(bào)工時(shí) private Double sWorkTime; //標(biāo)準(zhǔn)工時(shí) private Double param; //經(jīng)營(yíng)參數(shù) public void setYear(String year) { this.year = year; } public void setMonth(String month) { this.month = month; } public void setDeptName(String deptName) { this.deptName = deptName; } public void setDeptLeader(String deptLeader) { this.deptLeader = deptLeader; } public void setJyz(Double jyz) { this.jyz = jyz; } public String getYear() { return year; } public String getMonth() { return month; } public String getDeptName() { return deptName; } public String getDeptLeader() { return deptLeader; } public Double getJyz() { return jyz; } public Double getRev() { return rev; } public Double getExp() { return exp; } public Double gettWorkTime() { return tWorkTime; } public Double getsWorkTime() { return sWorkTime; } public Double getParam() { return param; } public void setRev(Double rev) { this.rev = rev; } public void setExp(Double exp) { this.exp = exp; } public void settWorkTime(Double tWorkTime) { this.tWorkTime = tWorkTime; } public void setsWorkTime(Double sWorkTime) { this.sWorkTime = sWorkTime; } public void setParam(Double param) { this.param = param; } public <E> E get(String name) { Class cl = this.getClass(); Field[] fields = cl.getDeclaredFields(); try { for (Field field : fields) { field.setAccessible(true); if (field.getName().equals(name)) { return (E) field.get(this); } } } catch (IllegalAccessException e) { e.printStackTrace(); } return null; } }
2.根據(jù)字段名獲取value
public <E> E get(String name) { Class cl = this.getClass(); Field[] fields = cl.getDeclaredFields(); try { for (Field field : fields) { field.setAccessible(true); if (field.getName().equals(name)) { return (E) field.get(this); } } } catch (IllegalAccessException e) { e.printStackTrace(); } return null; }
3.對(duì)list過(guò)濾
List businessDeptList = this.myQuery(); //篩選符合條件的list if (businessDeptList.size()>0){ businessDeptList = this.filterExact("year",year,businessDeptList); businessDeptList = this.filterExact("month",month,businessDeptList); businessDeptList = this.filterVague("deptName",deptName,businessDeptList); businessDeptList = this.filterVague("deptLeader",deptLeader,businessDeptList); if(!StringUtils.isEmpty(jyz)){ businessDeptList = this.filterExact("jyz",Double.parseDouble(jyz),businessDeptList); } if(!StringUtils.isEmpty(param)){ businessDeptList = this.filterExact("param",Double.parseDouble(param),businessDeptList); } if(!StringUtils.isEmpty(sWorkTime)){ businessDeptList = this.filterExact("sWorkTime",Double.parseDouble(sWorkTime),businessDeptList); } if(!StringUtils.isEmpty(rev)){ businessDeptList = this.filterExact("rev",Double.parseDouble(rev),businessDeptList); } if(!StringUtils.isEmpty(exp)){ businessDeptList = this.filterExact("exp",Double.parseDouble(exp),businessDeptList); } if(!StringUtils.isEmpty(tWorkTime)){ businessDeptList = this.filterExact("tWorkTime",Double.parseDouble(tWorkTime),businessDeptList); } }
4.精確匹配
//精確匹配 private <T>List<BusinessDept> filterExact(String name,T t,List<BusinessDept> businessDepts){ if(t.toString().isEmpty()){ return businessDepts; } List<BusinessDept> list = new ArrayList<BusinessDept>(); if(businessDepts.size()>0){ for(int i = 0;i<businessDepts.size();i++){ if(businessDepts.get(i).get(name).equals(t)){ list.add(businessDepts.get(i)); } } } return list; }
5.模糊匹配
//模糊匹配 private List<BusinessDept> filterVague(String name,String s,List<BusinessDept> businessDepts){ if(s.isEmpty()){ return businessDepts; } List<BusinessDept> list = new ArrayList<BusinessDept>(); if(businessDepts.size()>0){ for(int i = 0;i<businessDepts.size();i++){ if(businessDepts.get(i).get(name).toString().contains(s)){ list.add(businessDepts.get(i)); } } } return list; }
到此這篇關(guān)于Java利用反射對(duì)list對(duì)象做過(guò)濾的文章就介紹到這了,更多相關(guān)list對(duì)象過(guò)濾內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
lombok?子類(lèi)中如何使用@Builder問(wèn)題
這篇文章主要介紹了lombok?子類(lèi)中如何使用@Builder問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09java實(shí)現(xiàn)簡(jiǎn)單撲克牌游戲
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡(jiǎn)單撲克牌游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-09-09如何使用Jenkins構(gòu)建GIT+Maven項(xiàng)目
這篇文章主要介紹了如何使用Jenkins構(gòu)建GIT+Maven項(xiàng)目,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09spring cloud config分布式配置中心的高可用問(wèn)題
本文給大家介紹spring cloud config分布式配置中心的高可用問(wèn)題,通過(guò)整合Eureka來(lái)實(shí)現(xiàn)配置中心的高可用,需要的朋友參考下本文2018-01-01Java并發(fā)編程之線(xiàn)程創(chuàng)建介紹
這篇文章主要介紹了Java并發(fā)編程之線(xiàn)程創(chuàng)建,進(jìn)程是代碼在數(shù)據(jù)集合上的一次運(yùn)行活動(dòng),是系統(tǒng)進(jìn)行資源分配和調(diào)度的基本單位,線(xiàn)程則是一個(gè)實(shí)體,一個(gè)進(jìn)程中至少有一個(gè)線(xiàn)程,下文更多相關(guān)內(nèi)容需要的小伙伴可以參考一下2022-04-04