stream java 数据根据摸个字段去重后在分组
时间: 2024-05-02 12:16:30 浏览: 98
java1.8 中 stream 的 groupingBy 最大值、最小值分组
你可以使用Java 8的流式处理来实现按照某个字段去重,并分组的操作。具体实现可以参考以下代码示例:
假设你有一个包含多个对象的List,每个对象包含一个字段name和一个字段group,你想按照group字段去重,并按照group字段分组,可以使用以下代码:
```java
List<MyObject> myList = ... // 原始对象列表
Map<String, List<MyObject>> myMap = myList.stream()
.collect(Collectors.groupingBy(MyObject::getGroup,
Collectors.collectingAndThen(
Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(MyObject::getName))),
ArrayList::new)
));
```
这段代码中,首先使用`Collectors.groupingBy`按照group字段进行分组,然后使用`Collectors.collectingAndThen`将每个分组内的元素按照name字段去重。最终得到一个Map,其中key为group字段的值,value为去重后的对象列表。
注意,在上述代码中,使用了`TreeSet`来进行去重操作。`TreeSet`是一个有序集合,可以自动按照元素的自然顺序进行排序。在这里,我们通过传入一个`Comparator`来指定按照name字段进行排序。最后,再将`TreeSet`转换为`ArrayList`,以便将其作为最终结果的value返回。
阅读全文