maven需要引入的JAR
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2.2</version>
</dependency>
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.9.2</version>
</dependency>
MyPredicate.java
import java.math.BigDecimal;
import org.apache.commons.beanutils.PropertyUtils;
import org.apache.commons.collections.Predicate;
public class MyPredicate implements Predicate {
private String property;
private Object value;
public MyPredicate(String property, Object value) {
this.property = property;
this.value = value;
}
public boolean evaluate(Object object) {
try {
Object beanValue;
if (property.indexOf(".") > 0) {
beanValue = PropertyUtils.getNestedProperty(object, property);
} else {
beanValue = PropertyUtils.getProperty(object, property);
}
if (beanValue == null) {
return false;
}
if (!value.getClass().equals(beanValue.getClass())) {
throw new RuntimeException("value.class!=beanValue.class");
}
return myCompare(beanValue, value);
} catch (Exception e) {
throw new RuntimeException(e.getMessage(), e.getCause());
}
}
private boolean myCompare(Object value, Object beanValue) {
if (beanValue.getClass().equals(Integer.class)) {
if ((beanValue).equals(value)) {
return true;
}
}
if (beanValue.getClass().equals(BigDecimal.class)) {
if (((BigDecimal) beanValue).compareTo((BigDecimal) value) == 0) {
return true;
}
}
if (beanValue.getClass().equals(String.class)) {
if (beanValue.toString().equals(value.toString())) {
return true;
}
}
if (beanValue.getClass().equals(Double.class)) {
if ((beanValue).equals(value)) {
return true;
}
} else {
if (beanValue == value) {
return true;
}
}
return false;
}
}
测试方法
import org.andy.work.entity.UserEntity;
import org.andy.work.util.MyPredicate;
import org.apache.commons.collections.CollectionUtils;
import org.junit.Test;
import org.apache.commons.collections.Predicate;
import java.util.ArrayList;
import java.util.List;
@Test
public void test() {
List<UserEntity> list = new ArrayList<UserEntity>();
UserEntity userEntity1 = new UserEntity(1, "吕布", "111");
UserEntity userEntity2 = new UserEntity(2, "孙权", "222");
UserEntity userEntity3 = new UserEntity(3, "吕布", "333");
UserEntity userEntity4 = new UserEntity(4, "刘备", "444");
UserEntity userEntity5 = new UserEntity(5, "张飞", "555");
list.add(userEntity1);
list.add(userEntity2);
list.add(userEntity3);
list.add(userEntity4);
list.add(userEntity5);
UserEntity userEntity6 = new UserEntity(6, "吕布", "666");
Predicate isProblem = new MyPredicate("name", userEntity6.getName());
List<UserEntity> result = (List<UserEntity>) CollectionUtils.select(list, isProblem);
System.out.println(result.toString());
}
输出打印
[UserEntity{id=1, name='吕布', password='111'}, UserEntity{id=3, name='吕布', password='333'}]