stream根据类型分组,在获取id集合
时间: 2023-06-19 17:08:50 浏览: 91
java8 集合 多字段 分组 统计个数代码
5星 · 资源好评率100%
可以使用Java 8的Stream API来实现这个功能。首先,我们需要通过类型对数据进行分组,可以使用Collectors.groupingBy()方法实现。然后,我们可以使用Map.keySet()方法获取所有键的集合,即类型集合。最后,我们可以使用flatMap()和collect()方法将每个类型的id集合合并为一个集合。以下是示例代码:
```java
import java.util.*;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<Data> dataList = Arrays.asList(
new Data("type1", 1),
new Data("type2", 2),
new Data("type1", 3),
new Data("type3", 4),
new Data("type2", 5)
);
Map<String, List<Integer>> groupedData = dataList.stream()
.collect(Collectors.groupingBy(Data::getType, Collectors.mapping(Data::getId, Collectors.toList())));
List<Integer> idList = groupedData.keySet().stream()
.flatMap(key -> groupedData.get(key).stream())
.collect(Collectors.toList());
System.out.println(idList);
}
}
class Data {
private String type;
private int id;
public Data(String type, int id) {
this.type = type;
this.id = id;
}
public String getType() {
return type;
}
public int getId() {
return id;
}
}
```
输出结果为:
```
[1, 3, 2, 5, 4]
```
其中,Data类用于封装数据,包括类型和id两个属性。首先,我们定义了一个包含5个Data对象的列表dataList作为示例数据。然后,我们使用Stream API对数据进行分组,将相同类型的数据分为一组,并将每组数据的id集合收集到一个列表中。最后,我们使用flatMap()方法将每个类型的id列表合并为一个列表,并使用collect()方法收集结果到一个列表中。
阅读全文