介绍
定义实体示例
@Data
@NoArgsConstructor
@AllArgsConstructor
public class MyBean {
private Integer provinceId;
private String provinceName;
private Integer cityId;
private String cityName;
}
List<MyBean> list = new ArrayList<>(10);
list.add(new MyBean(1, "广东", 11, "广州"));
list.add(new MyBean(1, "广东", 12, "深圳"));
list.add(new MyBean(1, "广东", 13, "东莞"));
list.add(new MyBean(2, "广西", 21, "南宁"));
list.add(new MyBean(2, "广西", 22, "柳州"));
list.add(new MyBean(2, "广西", 23, "桂林"));
合并
- 需求:获取所有省份和城市id,放到一个集合中
flatMap
,将元素进行合并
Set<Integer> ids = list.stream()
.flatMap(e -> Stream.of(e.getProvinceId(), e.getCityId()))
.collect(Collectors.toSet());
分组并映射
- 需求:根据省份id分组,然后value值只需要城市id列表
groupBy
,将元素根据安求进行分组,但是此时获取到的分组value列表是一个完整的元素对象。此时如果我们仅需要分组value列表中元素对象的某个属性时,用mapping
进行转换
Map<Integer, List<Integer>> groupMap = list.stream()
.collect(Collectors.groupingBy(MyBean::getProvinceId,
Collectors.mapping(MyBean::getCityId, Collectors.toList())));