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. p2p通信原理及实现(转)

    1.简介 当今互联网到处存在着一些中间件(MIddleBoxes),如NAT和防火墙,导致两个(不在同一内网)中的客户端无法直接通信.这些问题即便是到了IPV6时代也会存在,因为即使不需要NAT,但还 ...

  2. hadoop深入学习之SequenceFile

    的1个byte 3.Key和Value的类名 4.压缩相关的信息 5.其他用户定义的元数据 6.同步标记,sync marker Metadata 在文件创建时就写好了,所以也是不能更改的.条记录存储 ...

  3. 下ue节点

    #!/bin/bash action=$1 port=$2 file="/home/operation/workspace/renderingengine/engine/services.t ...

  4. Python——基础数据类型(补充)

    1.基础数据类型汇总补充 (1)小数据池:   为了节省空间,数字和字符串有,其他的没有[了解]   数字:-5---256之间的数字共用一个内存地址 #(1)i1 = i2 id(i1) == id ...

  5. python 变量 不断 相加 or 相减的简便写法 a +=1

    相加: 相减:

  6. Appium+python自动化25-windows版appium_desktop_V1.7.1

    appium_desktop_v1.2.6 1.appium_desktop在github上最新下载地址:releases/tag/v1.2.6 2.下载后傻瓜式安装,然后启动appium,这个界面跟 ...

  7. POJ 2674 Linear world(弹性碰撞)

    Linear world Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 4426   Accepted: 1006 Desc ...

  8. hive默认分隔符引起的日志分割问题

    Hive中的外部表 对于Hive中的外部表来说,因为表是外部的,Hive认为其并不拥有这份数据,删除该表并不会真正删除其中的数据,其中的表描述元信息会被删除掉.   对数据进行分区后,对于管理表,可以 ...

  9. nginx 反向代理与负载均衡应用实践

    集群介绍 集群就是指一组(若干个)相互独立的计算机,利用高速通信网络组成的一个较大的计算机服务系统,每个集群节点(即集群中的每台计算机)都是运行各自服务的独立服务器.这些服务器之间可以彼此通信,协同向 ...

  10. 2017百度之星初赛B-1002(HDU-6115)

    一.思路 这题“看似”比较难搞的一点是,一个节点上有多个办公室,这怎么求?其他的,求树中任意两个节点的距离(注意:没有最远或最最进这一说法,因为树上任意两个节点之间有且仅有一条路径.不然就有回路了,对 ...