java8写一个从配置文件中获取多个条件,并将list中满足条件的数据skip掉的共通方法
时间: 2024-05-08 08:15:54 浏览: 107
java8新特性将List中按指定属性排序过滤重复数据的方法
5星 · 资源好评率100%
以下是一个简单的示例代码,可以从配置文件中获取多个条件,并将符合条件的数据skip掉:
```java
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.Properties;
import java.util.function.Predicate;
import java.util.stream.Collectors;
public class SkipDataUtil {
public static <T> List<T> skipData(List<T> dataList, String configFile) throws IOException {
Properties props = new Properties();
try (InputStream input = new FileInputStream(configFile)) {
props.load(input);
}
Predicate<T> skipCondition = null;
for (String key : props.stringPropertyNames()) {
String value = props.getProperty(key);
if (skipCondition == null) {
skipCondition = createPredicate(key, value);
} else {
skipCondition = skipCondition.and(createPredicate(key, value));
}
}
if (skipCondition != null) {
return dataList.stream().filter(skipCondition.negate()).collect(Collectors.toList());
}
return dataList;
}
private static <T> Predicate<T> createPredicate(String key, String value) {
return t -> {
try {
Object fieldValue = t.getClass().getField(key).get(t);
return !fieldValue.toString().equals(value);
} catch (NoSuchFieldException | IllegalAccessException e) {
e.printStackTrace();
}
return true;
};
}
}
```
使用方法:
```java
List<MyData> dataList = ...; // 要处理的数据列表
String configFile = "skip_config.properties"; // 配置文件路径
List<MyData> filteredData = SkipDataUtil.skipData(dataList, configFile); // 过滤后的数据列表
```
其中,`MyData` 是要处理的数据类型,`skip_config.properties` 是配置文件,格式如下:
```
field1=value1
field2=value2
...
```
其中,`field1`、`field2` 表示要跳过的数据的条件字段名,`value1`、`value2` 表示要跳过的数据的条件值。上述代码会将 `dataList` 中所有 `field1` 的值为 `value1`,且 `field2` 的值为 `value2` 的数据 skip 掉。可以根据需要在配置文件中添加更多的条件。
阅读全文