import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set; import org.apache.commons.beanutils.BeanPredicate;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.Predicate;
import org.apache.commons.collections.PredicateUtils;
import org.apache.commons.collections.functors.EqualPredicate; import com.yanfuchang.work.common.Reflections; /**
* @ClassName: ConditionFilterUtil
* @Description: 条件过滤工具类
*/
public class ConditionFilterUtil { /**
* 用于处理属性与属性值的类
*/
public static class ConditionListMap {
private Map<String, List<Object>> map = new HashMap<String, List<Object>>();
public List<Object> get(String key) {
return map.get(key);
};
public Map<String, List<Object>> getMap() {
return map;
}
public void put(String key, Object value) {
List<Object> list = map.get(key);
if (list != null) {
list.add(value);
} else {
List<Object> arrayList = new ArrayList<Object>();
arrayList.add(value);
map.put(key, arrayList);
}
}
} /**
* 根据条件筛选出相应对象集合
*/
@SuppressWarnings("unchecked")
public static <T> List<T> findList(Collection<T> list, String propertyName, Object agers) {
if (agers == null) { // 如果是空则返回一个复制的集合
return new ArrayList<T>(list);
}
EqualPredicate parameter = new EqualPredicate(agers);
BeanPredicate tableCoulmn_paramerter = new BeanPredicate(propertyName, parameter);
List<T> filteredCollection = null;
synchronized (list) {
filteredCollection = (List<T>) CollectionUtils.select(list, tableCoulmn_paramerter);
}
return filteredCollection;
} /**
* 根据条件筛选出相应对象集合,只对该对象本身的属性进行筛选,排除继承属性
*/
@SuppressWarnings("unchecked")
public static <T> List<T> findListByMultiCond(Collection<T> list, T obj) { try {
if (obj == null) { // 如果是空则返回一个复制的集合
return new ArrayList<T>(list);
}
Predicate allPredicate = getAllPredicateByList(obj);
List<T> filteredCollection = null;
synchronized (list) {
filteredCollection = (List<T>) CollectionUtils.select(list, allPredicate);
}
return filteredCollection;
} catch (Exception e) {
e.printStackTrace();
}
return new ArrayList<T>();
} /**
* 根据条件筛选出相应对象集合,只对该对象本身的属性进行筛选,排除继承属性
*/
@SuppressWarnings("unchecked")
public static <T> List<T> findListByMultiCond(List<T> list, T obj) { try {
if (obj == null) { // 如果是空则返回一个复制的集合
return new ArrayList<T>(list);
}
Predicate allPredicate = getAllPredicateByList(obj);
List<T> filteredCollection = null;
synchronized (list) {
filteredCollection = (List<T>) CollectionUtils.select(list, allPredicate);
}
return filteredCollection;
} catch (Exception e) {
e.printStackTrace();
}
return new ArrayList<T>();
} /**
* 获取满足所有条件的断言
*/
public static Predicate getAllPredicateByList(ConditionListMap conditionListMap) { Map<String, List<Object>> propertyValMap = conditionListMap.getMap();
List<Predicate> predicateList = new ArrayList<Predicate>();
Set<Entry<String, List<Object>>> entrySet = propertyValMap.entrySet();
for (Entry<String, List<Object>> entry : entrySet) {
String key = entry.getKey();
List<Object> values = entry.getValue();
for (Object value : values) {
EqualPredicate parameter = new EqualPredicate(value);
BeanPredicate tableCoulmn_paramerter = new BeanPredicate(key, parameter);
predicateList.add(tableCoulmn_paramerter); }
}
Predicate predicate = PredicateUtils.allPredicate(predicateList);
return predicate;
} /**
* 获取满足所有条件的断言
*/
public static Predicate getAllPredicateByList(Map<String, Object> propertyValMap) {
List<Predicate> predicateList = new ArrayList<Predicate>();
Set<Entry<String, Object>> entrySet = propertyValMap.entrySet();
for (Entry<String, Object> entry : entrySet) {
String key = entry.getKey();
Object value = entry.getValue(); EqualPredicate parameter = new EqualPredicate(value);
BeanPredicate tableCoulmn_paramerter = new BeanPredicate(key, parameter);
predicateList.add(tableCoulmn_paramerter);
}
Predicate predicate = PredicateUtils.allPredicate(predicateList);
return predicate;
} /**
* 获取满足所有条件的断言
*/
public static <T> Predicate getAllPredicateByList(T obj) {
List<Predicate> predicateList = new ArrayList<Predicate>();
Field[] declaredFields = obj.getClass().getDeclaredFields();
for (Field field : declaredFields) {
if (Modifier.isFinal(field.getModifiers()) || Modifier.isStatic(field.getModifiers()))
continue; // static或final遍历下一个
Object fieldValue = Reflections.getFieldValue(obj, field.getName());
if (fieldValue == null)
continue;
EqualPredicate parameter = new EqualPredicate(fieldValue);
BeanPredicate tableCoulmn_paramerter = new BeanPredicate(field.getName(), parameter);
predicateList.add(tableCoulmn_paramerter);
} Predicate finalPredicate = PredicateUtils.allPredicate(predicateList);
return finalPredicate;
} /**
* 获取满足任意条件的断言
*/
public static Predicate getAnyPredicateByList(ConditionListMap conditionListMap) { Map<String, List<Object>> propertyValMap = conditionListMap.getMap();
List<Predicate> predicateList = new ArrayList<Predicate>();
Set<Entry<String, List<Object>>> entrySet = propertyValMap.entrySet();
for (Entry<String, List<Object>> entry : entrySet) {
String key = entry.getKey();
List<Object> values = entry.getValue();
for (Object value : values) {
EqualPredicate parameter = new EqualPredicate(value);
BeanPredicate tableCoulmn_paramerter = new BeanPredicate(key, parameter);
predicateList.add(tableCoulmn_paramerter); }
}
Predicate predicate = PredicateUtils.anyPredicate(predicateList);
return predicate;
} /**
* 获取满足任意条件的断言
*/
public static Predicate getAnyPredicateByList(Map<String, List<Object>> propertyValMap) { List<Predicate> predicateList = new ArrayList<Predicate>();
Set<Entry<String, List<Object>>> entrySet = propertyValMap.entrySet();
for (Entry<String, List<Object>> entry : entrySet) {
String key = entry.getKey();
List<Object> values = entry.getValue();
for (Object value : values) {
EqualPredicate parameter = new EqualPredicate(value);
BeanPredicate tableCoulmn_paramerter = new BeanPredicate(key, parameter);
predicateList.add(tableCoulmn_paramerter); }
}
Predicate predicate = PredicateUtils.anyPredicate(predicateList);
return predicate;
} /**
* 获取满足所有条件的断言
*/
public static <T> Predicate getAnyPredicateByList(T obj) {
List<Predicate> predicateList = new ArrayList<Predicate>();
Field[] declaredFields = obj.getClass().getDeclaredFields();
for (Field field : declaredFields) {
if (Modifier.isFinal(field.getModifiers()) || Modifier.isStatic(field.getModifiers()))
continue; // static或final遍历下一个
Object fieldValue = Reflections.getFieldValue(obj, field.getName());
if (fieldValue == null)
continue;
EqualPredicate parameter = new EqualPredicate(fieldValue);
BeanPredicate tableCoulmn_paramerter = new BeanPredicate(field.getName(), parameter);
predicateList.add(tableCoulmn_paramerter);
} Predicate finalPredicate = PredicateUtils.anyPredicate(predicateList);
return finalPredicate;
} @SuppressWarnings("unchecked")
public static <T> T getFirst(Collection<T> list, String propertyName, Object agers) {
EqualPredicate parameter = new EqualPredicate(agers);
BeanPredicate tableCoulmn_paramerter = new BeanPredicate(propertyName, parameter);
T finalResult = null;
synchronized (list) {
finalResult = (T) CollectionUtils.find(list, tableCoulmn_paramerter);
}
return finalResult;
} /**
* 根据条件筛选出相应对象集合
*/
@SuppressWarnings("unchecked")
public static <T> T getFirst(List<T> list, String propertyName, Object agers) {
Predicate finalPredicate = null;
if (agers == null) {
finalPredicate = PredicateUtils.truePredicate();
} else {
EqualPredicate parameter = new EqualPredicate(agers);
BeanPredicate tableCoulmn_paramerter = new BeanPredicate(propertyName, parameter);
T finalResult = null;
synchronized (list) {
finalResult = (T) CollectionUtils.find(list, tableCoulmn_paramerter);
}
return finalResult;
}
return null;
} @SuppressWarnings("unchecked")
public static <T> T getFirstByMultiCond(Collection<T> list, T obj) {
Predicate allPredicateByList = getAllPredicateByList(obj);
T finalResult = null;
synchronized (list) {
finalResult = (T) CollectionUtils.find(list, allPredicateByList);
}
return finalResult;
} /**
* 根据条件筛选出相应对象集合
*/
@SuppressWarnings("unchecked")
public static <T> T getFirstByMultiCond(List<T> list, T obj) {
Predicate allPredicateByList = getAllPredicateByList(obj);
T finalResult = null;
synchronized (list) {
finalResult = (T) CollectionUtils.find(list, allPredicateByList);
}
return finalResult;
} /**
* 获得ConditionListMap
*/
public static ConditionListMap newConditionListMap() {
return new ConditionListMap();
}
}

依赖:

         <dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.9.1</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>

最新文章

  1. yii2实战教程之第一个Yii程序
  2. Sublime Text 使用笔记
  3. UWP中GridView右击选中的实现
  4. Android 手机卫士--解析json与消息机制发送不同类型消息
  5. 【Gym 100733D】Little thief Shi
  6. Linux 性能监测:介绍
  7. Hibernate映射类型对照表
  8. return x&gt;y?x:y ?:啥意思?
  9. windows下用mingw编译linux项目
  10. iOS内存管理retain,assign,copy,strong,weak
  11. POJ-1088 滑雪 (包含部分自用测试数据)
  12. Gearman + Nodejs + MySQL UDF异步实现 MySQL 到 Redis 的数据同步
  13. 一个js变量以及其作用域的源码示例
  14. Android_实现静默安装和卸载应用
  15. JavaSE学习总结第13天_API常用对象3
  16. C++ stl 怎么打印内存内容?
  17. JQuery实现数组移除指定元素
  18. 迅为-IMX6UL开发板丨双网口丨双CAN总线丨4路USB HOST丨2路串口、6路插座引出,共8路串口丨1路RGB信号丨2路LVDS信号
  19. python全栈开发day81--jsonp
  20. PostgreSQL 的命令行工具 psql 的常用命令

热门文章

  1. ecmall页面空白解决方案(转)
  2. 浅谈浅克隆(shallow clone)和 深克隆(deep clone)
  3. python 面向对象(其他相关)
  4. 杂项:HTML5-2/3-新元素
  5. centos 安装 Splunk
  6. 性能监控之Spotlight
  7. hotplug_uevent机制_修改mdev配置支持U盘自动挂载学习笔记
  8. length length()
  9. pvalue for go kegg enrichment
  10. Spring源码研究--下载-编译-导入eclipse-验证