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>

Java-集合条件筛选的更多相关文章

  1. python基础一 -------如何在列表字典集合中根据条件筛选数据

    如何在列表字典集合中根据条件筛选数据 一:列表 先随机生成一个列表,过滤掉负数 1,普通for循环迭代判断 2,filter()函数判断,filter(函数,list|tuple|string) fi ...

  2. python数据结构-如何在列表、字典、集合中根据条件筛选数据

    如何在列表.字典.集合中根据条件筛选数据 问题举例: 过滤列表[1, 2, 5, -1, 9, 10]中的负数 筛选字典{“zhangsan”:97, "lisi":80, &qu ...

  3. python 学习笔记(一):在列表、字典、集合中根据条件筛选数据

    一.在列表中筛选数据 在列表中筛选出大于等于零的数据,一般通用的用法代码如下: data = [3, -9, 0, 1, -6, 3, -2, 8, -6] #要筛选的原始数据列表 result = ...

  4. Python 高效编程技巧实战(2-1)如何在列表,字典, 集合中根据条件筛选数据

    Python 高效编程技巧实战(2-1)如何在列表,字典, 集合中根据条件筛选数据 学习目标 1.学会使用 filter 借助 Lambda 表达式过滤列表.集合.元组中的元素: 2.学会使用列表解析 ...

  5. 1、如何在列表,字典,集合种根据条件筛选数据?2、如何为元组中的每个元素命名,提高程序的可读性3、如何统计出序列中元素出现的频度4、如何根据字典中value的大小,对字典的key进行排序

    一.数据筛选: 处理方式: 1.filter函数在py3,返回的是个生成式. from random import randint data = [randint(-100,100) for i in ...

  6. Java集合框架体系JCF

    Java 集合框架体系作为Java 中十分重要的一环, 在我们的日常开发中扮演者十分重要的角色, 那么什么是Java集合框架体系呢? 在Java语言中,Java语言的设计者对常用的数据结构和算法做了一 ...

  7. java1.8 新特性(五 如何使用filter,limit ,skip ,distinct map flatmap ,collect 操作 java集合)

    使用filter 根据 条件筛选 出结果:例如 找出 user 中 age >=15 的用户 package lambda.stream; /** * @author 作者:cb * @vers ...

  8. 常用的函数式接口_Prodicate接口_默认方法or&negate和常用的函数式接口_Predicate接口练习_集合信息筛选

    常用的函数式接口_Prodicate接口_默认方法or&negate OR package com.yang.Test.PredicateStudy; import java.util.fun ...

  9. Java集合框架List,Map,Set等全面介绍

    Java集合框架的基本接口/类层次结构: java.util.Collection [I]+--java.util.List [I]   +--java.util.ArrayList [C]   +- ...

随机推荐

  1. VLOOKUP函数使用

    跟财务老婆学习了个excel函数 -- vlookup函数,记录一下,省得下次用忘了. 需求:有两张表,将第一张表的第二个字段g2去搜索第二张表的字段d2,如果相等,将第二张表的第三个字段追加到第一张 ...

  2. 什么是YARN

    YARN的核心组件: 1)ResourceManager,扮演Master角色(和HDFS的nameNode很像)主要用于资源分配:RM有两个子组件,分别是Scheduler(Capacity Sch ...

  3. RESTful的一个样例

    后台代码: @RequestMapping(value = { "queues" }) @ResponseBody public List<ResourcePool> ...

  4. spring整合xfire出现Document root element "beans", must match DOCTYPE root "null"错误解决方案

    fire自带的包下有个spring1.2.6的jar包,而工程的jar包是2.0的. 解决方案: 1.将原配置文件的头schema方式换为DOCTYPE方式,原配置文件如下(非maven) <? ...

  5. 生产环境LNMP (交友)

    一. 下载一键安装包 LNMP   官方地址为:http://lnmp.org/ 原生产环境为 : php5.4.32  mysql 5.5  nginx 1.40   我们用LNMP包安装相应的环境 ...

  6. PostgreSQL编译安装

    PostgreSQL编译安装 安装语言包 ### PostgreSQL 初始化过程中,会读取操作系统字符编码, ### 若程序需要使用zh_CN.utf-8字符编码,需要在PostgreSQL 初始化 ...

  7. 32位centos下安装jdk1.7报Permission denied处理方式

    本文转载自:http://blog.csdn.net/snowwhitewolf/article/details/50287877 环境:centos5.8 32位jdk-7u71-Linux-i58 ...

  8. python接口自动化19-requests-toolbelt处理multipart/form-data

    requests-toolbelt 1.官方文档地址:requests-toolbelt官方文档 2.环境安装 pip install requests-toolbelt multipart/form ...

  9. 【洛谷】P3908 异或之和(异或)

    题目描述 求1 \bigoplus 2 \bigoplus\cdots\bigoplus N1⨁2⨁⋯⨁N 的值. A \bigoplus BA⨁B 即AA , BB 按位异或. 输入输出格式 输入格 ...

  10. ThinkPHP实例—实现登录验证

    ThinkPHP 验证 本篇我们将运用商城实例讲解一下如何运用ThinkPHP做一个登录验证 我们的框架目录结构如下图所示: 其中 app  文件夹就是我们的应用文件夹  它的目录结构如下所示 其中 ...