Java利用反射对list对象做过滤

作者:峰啊疯了 时间:2023-12-23 07:39:17 

Java利用反射对list对象做过滤

反射对效率有影响 慎用!!!

1.对象结构

public class BusinessDept {
private String year;//年
private String month;//月
private String deptName;//部门名称
private String deptLeader;//部门负责人
private Double jyz; //经营值
private Double rev; //收入
private Double exp; //支出
private Double tWorkTime; //填报工时
private Double sWorkTime; //标准工时
private Double param; //经营参数

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.根据字段名获取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.对list过滤

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;
}

来源:https://blog.51cto.com/u_12040959/5051652

标签:Java,反射,list,对象,过滤
0
投稿

猜你喜欢

  • 在C#的类或结构中重写ToString方法的用法简介

    2022-04-04 04:26:14
  • C#方法中参数ref和out详解

    2021-07-19 12:59:32
  • 详解android与服务端交互的两种方式

    2022-11-08 00:24:51
  • Android Flutter使用本地数据库编写备忘录应用

    2023-09-15 17:24:09
  • Spring Boot FeignClient 如何捕获业务异常信息

    2022-01-26 11:57:41
  • Android Gradle模块依赖替换使用技巧

    2021-07-03 20:22:53
  • 通过实例解析java过滤器和拦截器的区别

    2022-12-21 05:02:45
  • Spring Security学习笔记(一)

    2023-09-10 06:25:09
  • Spring Boot2中如何优雅地个性化定制Jackson实现示例

    2021-09-27 12:21:15
  • Android中选项菜单(OptionMenu)的创建方法

    2021-06-08 14:14:42
  • 深入多线程之:用Wait与Pulse模拟一些同步构造的应用详解

    2021-07-09 06:14:19
  • 基于C#实现获取本地磁盘目录

    2021-08-21 12:51:43
  • Android中Fragment的基本用法示例总结

    2021-11-25 19:00:23
  • 实例解析如何正确使用Java数组

    2023-04-14 23:00:55
  • java中String的一些方法深入解析

    2023-11-25 21:48:56
  • Spring Cloud Gateway 记录请求应答数据日志操作

    2021-12-27 07:25:53
  • android开发教程之获取使用当前api的应用程序名称

    2023-12-20 14:35:10
  • 常用Eclipse快捷方式(推荐)

    2022-01-22 04:37:56
  • Java NegativeArraySizeException异常解决方案

    2023-10-31 07:16:51
  • Android如何基于坐标对View进行模拟点击事件详解

    2021-09-24 06:27:30
  • asp之家 软件编程 m.aspxhome.com