不用Stream对List<Map<String,Object>>去重
时间: 2023-04-08 16:04:13 浏览: 147
可以使用Java 8中的Lambda表达式和Stream API来对List<Map<String,Object>>进行去重操作。具体实现方式如下:
List<Map<String,Object>> list = new ArrayList<>();
// 添加元素到list中
List<Map<String,Object>> distinctList = list.stream()
.collect(Collectors.collectingAndThen(
Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(map -> map.get("key")))),
ArrayList::new));
这段代码使用了Collectors.toCollection()方法来创建一个TreeSet集合,该集合会根据Map中的key进行去重操作。然后使用Collectors.collectingAndThen()方法将去重后的结果转换为ArrayList类型。
需要注意的是,如果Map中的value值不同,那么这种去重方式可能会导致数据丢失。如果需要保留所有的value值,可以使用其他的去重方式,比如使用HashSet集合来进行去重操作。
相关问题
对List<Map<String,Object>>去重
可以使用Java 8的Stream API来去重,具体代码如下:
List<Map<String, Object>> list = new ArrayList<>();
// 添加数据到list中
List<Map<String, Object>> distinctList = list.stream()
.collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(m -> m.get("key")))), ArrayList::new));
// distinctList即为去重后的结果
stream流 List<Map<String, Object>>转List<Map<String,List<String>>>
在Java中,如果你有一个`List<Map<String, Object>>`类型的集合,你可以通过Stream API将其转换为`List<Map<String, List<String>>>`,前提是你能确定`Object`类型确实是字符串,并且已经封装成了列表形式。这通常涉及到先过滤、然后收集的过程。下面是一个示例:
```java
import java.util.*;
import java.util.stream.*;
List<Map<String, Object>> originalMaps = ...; // 假设这是你的原始数据
List<Map<String, List<String>>> convertedMaps = originalMaps.stream()
.map(map -> map.entrySet().stream() // 遍历每个Map的entrySet
.flatMap(entry -> entry.getValue().stream() // 如果value是Object[] 或者 Stream流,则进一步处理
.filter(obj -> obj instanceof String) // 筛选出String类型
.map(String.class::cast) // 转换为String
.collect(Collectors.toList())) // 收集到一个新的List<String>
.collect(Collectors.toList()); // 将所有entry对应的String列表收集到新的Map中
阅读全文