java8写一个通过配置文件中的多重条件,对list中满足全部条件的数据进行skip处理的共通方法
时间: 2024-05-09 19:20:04 浏览: 137
Java List集合返回值去掉中括号('[ ]')的操作
以下是一个示例代码,可以通过配置文件中的多重条件对list进行过滤:
```
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.function.Predicate;
public class ListFilter {
/**
* 通过配置文件中的多重条件,对list中满足全部条件的数据进行skip处理
*
* @param list 待过滤的列表
* @param configParams 配置参数,key为属性名,value为属性值
* @param <T> 列表元素类型
* @return 过滤后的列表
*/
public static <T> List<T> filter(List<T> list, Map<String, Object> configParams) {
List<Predicate<T>> predicates = new ArrayList<>();
for (Map.Entry<String, Object> entry : configParams.entrySet()) {
String propName = entry.getKey();
Object propValue = entry.getValue();
Predicate<T> predicate = item -> {
try {
Object value = item.getClass().getMethod("get" + propName.substring(0, 1).toUpperCase() + propName.substring(1)).invoke(item);
return value != null && value.equals(propValue);
} catch (Exception e) {
return false;
}
};
predicates.add(predicate);
}
Predicate<T> combinedPredicate = predicates.stream().reduce(Predicate::and).orElse(x -> true);
return list.stream().filter(combinedPredicate.negate()).toList();
}
}
```
使用方法示例:
```
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Main {
public static void main(String[] args) {
List<Person> list = Arrays.asList(
new Person("John", 25),
new Person("Mary", 30),
new Person("Tom", 25),
new Person("Alice", 30)
);
Map<String, Object> configParams = new HashMap<>();
configParams.put("age", 30);
List<Person> filteredList = ListFilter.filter(list, configParams);
System.out.println(filteredList);
}
}
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
```
输出结果为:
```
[Person{name='John', age=25}, Person{name='Tom', age=25}]
```
这里根据配置参数中的条件,过滤掉了年龄为30的两个人。
阅读全文