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. smarty 模板编译和变量调节器 模板引入

    <?php require './smarty/Smarty.class.php'; $sm = new Smarty; //$sm->force_compile = true; $sm- ...

  2. python官网

    https://www.python.org/ https://docs.python.org/2/library/pydoc.html

  3. spss v21.0 使用笔记

    spss v21.0 使用笔记 有问题,戳官方帮助文档 神经网络 分析-神经网络-多层感知机 变量. 分析-神经网络-多层感知机-变量 预测变量可指定为因子(分类)或协变量(刻度). 在因变量框输入预 ...

  4. AT指令(二)

    1.常用操作1.1 AT命令解释:检测 Module 与串口是否连通,能否接收 AT 命令:命令格式:AT<CR>命令返回:OK (与串口通信正常)             (无返回,与串 ...

  5. laravel的model例子

    5里面直接artisan建立model ./artisan make:model MyModel 找到MyModel,改成下面这样 <?php namespace App; use Illumi ...

  6. 30个让人兴奋的视差滚动(Parallax Scrolling)效果网站--转

    视差滚动(Parallax Scrolling)是指让多层背景以不同的速度移动,形成立体的运动效果,带来非常出色的视觉体验.作为今年网页设计的热点趋势,越来越多的网站应用了这项技术.今天这篇文章就与大 ...

  7. 在单片机上实现UDP

    http://blog.chinaunix.net/uid-18921523-id-260999.html

  8. [实践]使用JarJar优雅的发布依赖包

    [实践]使用JarJar优雅的发布依赖包 打包工具: Jar Jar Links是一个Java类库重新打包工具. 可以帮助你将其它用到的java库打包并嵌入到你自己的项目jar包中.这样做的原因有: ...

  9. 【洛谷】P2904 [USACO08MAR]跨河River Crossing(dp)

    题目描述 Farmer John is herding his N cows (1 <= N <= 2,500) across the expanses of his farm when ...

  10. Java:类与继承(隐藏和覆盖的问题)

    盒子先生金金   Java:类与继承(隐藏和覆盖的问题) Java:类与继承   Java:类与继承 对于面向对象的程序设计语言来说,类毫无疑问是其最重要的基础.抽象.封装.继承.多态这四大特性都离不 ...