map集合根据字段去重转list
时间: 2023-09-07 21:17:28 浏览: 45
假设你有一个包含多个对象的Map集合,每个对象都有一个字段值,你想要根据该字段去重并将其转化为一个List。可以按照以下步骤实现:
1. 使用Java 8的Stream API将Map转换为对象流
2. 使用distinct()方法根据字段去重
3. 使用collect()方法将去重后的流转换为List
以下是示例代码:
```java
List<Object> list = map.values().stream()
.filter(distinctByKey(Object::getField))
.collect(Collectors.toList());
```
其中,distinctByKey()是一个自定义方法,用于根据对象的某个字段进行去重。以下是该方法的示例实现:
```java
public static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) {
Set<Object> seen = ConcurrentHashMap.newKeySet();
return t -> seen.add(keyExtractor.apply(t));
}
```
在这个方法中,我们使用了Java 8的ConcurrentHashMap.newKeySet()方法创建了一个线程安全的Set集合,用于存储已经遍历过的字段值。在Predicate中,我们使用apply()方法从对象中提取字段值,将其作为Set集合的键,如果Set集合中不存在该键,则返回true,否则返回false。这样,我们就可以根据字段去重了。