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. java 简洁的分层实现

    1.分页实现 分页实现是将所有查询结果保存在session对象或集合中,翻页时从session对象或集合中取出一页所需的数据显示.但是这种方法有两个最主要的缺点:一是用户看到的可能是过期数据:二是如果 ...

  2. 用活Firewalld防火墙之direct

    原文地址:http://www.excelib.com/article/294/show 学生在前面已经给大家介绍过了Firewalld中direct的作用,使用他可以直接使用iptables.ip6 ...

  3. Windows下搭建Nginx图片服务器

    在项目最开始,上传图片的时候,服务器先保存原图再使用ImageMagick生成上传图片缩略图,这种方法有很多缺点,例如生成的缩略图的大小是固定的,不能动态请求指定大小的缩略图. 虽然有非常多的图片云存 ...

  4. java封装后引用的例子

    封装好的文件: 另外一个文件引用封装文件的方法: 来源: https://www.runoob.com/java/java-encapsulation.html

  5. 分布式事务之:TCC几个框架的测试情况记录

    国内主要的开源TCC分布式事务框架包括 框架名称 Github地址  star数量  tcc-transaction  https://github.com/changmingxie/tcc-tran ...

  6. nginx的编译安装以及启动脚本编写

    Nginx的编译安装和启动脚本的编写 Nginxd的功能强大,可以实现代理.负载均衡等企业常用的功能.下面介绍一下nginx的编译安装方法: 1. 下载 官方下载地址:http://nginx.org ...

  7. Java 中的instanceof 运算符

    Java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例.instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例. 用法:resu ...

  8. [置顶] apt-get update 更新失败----如何清除破损而且陈旧的PPA仓库 (W: Failed to fetch http://ppa.launchpad.net/jonathonf/pyt)

    我使用sudo apt-get update之后,更新失败,遇到如下错误. W: Failed to fetch http://ppa.launchpad.net/jonathonf/python-3 ...

  9. 【BZOJ】2006: [NOI2010]超级钢琴(前缀和+RMQ+堆)

    题目 传送门:QWQ 分析 又不会做....... 显然很好想到前缀和处理一下. 然后考虑最大化结果,直接上st表. 问题来了,然后呢? 怎么做$ length \in [l,r]  $ 呢? 正解是 ...

  10. 【洛谷】P2983 [USACO10FEB]购买巧克力Chocolate Buying(贪心)

    题目描述 Bessie and the herd love chocolate so Farmer John is buying them some. The Bovine Chocolate Sto ...