List<Map<String, Object>> result = jxMjKhTxService.selectJxMjkhTxData(constantProperties.getJsbh()); 根据多个字段去重
时间: 2024-02-03 14:11:21 浏览: 79
List集合多个复杂字段判断去重的案例
你可以使用 Java 8 的 Stream API 和 lambda 表达式来实现多字段去重。首先,你需要定义一个用于比较多个字段是否相同的函数,例如:
```
public static <T> Predicate<T> distinctByKey(Function<? super T, ?>... keyExtractors) {
final Map<List<?>, Boolean> seen = new ConcurrentHashMap<>();
return t -> {
final List<?> keys = Arrays.stream(keyExtractors)
.map(ke -> ke.apply(t))
.collect(Collectors.toList());
return seen.putIfAbsent(keys, Boolean.TRUE) == null;
};
}
```
这个函数接收一个或多个 `Function` 参数,每个参数都用于提取对象中的一个字段,然后将这些字段组成一个列表作为 Map 的 key。使用 `ConcurrentHashMap` 存储已经出现过的 key,保证线程安全。最后,返回一个 `Predicate`,用于过滤出不重复的元素。
接下来,你可以使用这个函数来去重,例如:
```
List<Map<String, Object>> result = jxMjKhTxService.selectJxMjkhTxData(constantProperties.getJsbh())
.stream()
.filter(distinctByKey(m -> Arrays.asList(m.get("field1"), m.get("field2"), ...)))
.collect(Collectors.toList());
```
其中,`field1`、`field2` 等是你要去重的字段名。这样,`result` 就是一个不含重复元素的列表了。
阅读全文