添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

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

作者:峰啊疯了

这篇文章主要介绍了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;

到此这篇关于Java利用反射对list对象做过滤的文章就介绍到这了,更多相关list对象过滤内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
  • 如何开启控制台输出mybatis执行的sql日志问题
    如何开启控制台输出mybatis执行的sql日志问题
    2023-09-09
  • IDEA调试小技巧之Evaluate调试工具详解
    IDEA调试小技巧之Evaluate调试工具详解
    2023-09-09
  • 一文带你搞懂Java中i++ 和 ++i的区别
    一文带你搞懂Java中i++ 和 ++i的区别
    2023-09-09
  • jedis的borrow行为方法源码解读
    jedis的borrow行为方法源码解读
    2023-09-09
  • java如何用反射将一个对象复制给另一个对象
    java如何用反射将一个对象复制给另一个对象
    2023-09-09
  • Spring中的@Scheduled源码解析
    Spring中的@Scheduled源码解析
    2023-09-09
  • 详解如何在React中逃离闭包陷阱
    详解如何在React中逃离闭包陷阱
    2023-09-09
  • Spring @ExceptionHandler注解统一异常处理和获取方法名
    Spring @ExceptionHandler注解统一异常处理和
    2023-09-09
  • 美国设下计谋,用娘炮文化重塑日本,已影响至中国
    美国设下计谋,用娘炮文化重塑日本,已影响至中国
    2021-11-19
  • 时空伴随者是什么意思?时空伴随者介绍
    时空伴随者是什么意思?时空伴随者介绍
    2021-11-09
  • 工信部称网盘企业免费用户最低速率应满足基本下载需求,天翼云盘回应:坚决支持,始终
    工信部称网盘企业免费用户最低速率应满足基本下载需求,天翼云盘回应:坚决支持,始终
    2021-11-05
  • 2022年放假安排出炉:五一连休5天 2022年所有节日一览表
    2022年放假安排出炉:五一连休5天 2022年所有节日一览表
    2021-10-26
  • 电脑版 - 返回首页

    2006-2024 脚本之家 JB51.Net , All Rights Reserved.
    苏ICP备14036222号