关于java8新特性之一Collectors.groupingby分组和flatMap()方法

常用是根据对象某一属性直接分组,但是是直接将整个对象收集到一个集合内当做map的值,
如果只想收集对象里的某个属性怎么办?
示例如下:

Map> planIdMap = Optional.ofNullable(positionManageService.list()).orElse(new ArrayList<>())
                .stream().collect(Collectors.groupingBy(RecruitmentPositionManage::getRecruitmentPlanId, Collectors.mapping(RecruitmentPositionManage::getId, Collectors.toList())));

收集对象里的属性为集合,但是该字段是逗号连接的多个值,如果想把它分开再收集怎么做?
flatMap()方法可以将元素转换成流,并把多个流如管道一般汇聚在一起,如下文取出字段分割之后即会转换成string数组,此时使用flatMap方法将各个元素转换成流再收集即可

        List userIds = page.getRecords().stream().map(e->e.getUserIds().split(",")).flatMap(Arrays::stream).collect(Collectors.toList());

你可能感兴趣的:(关于java8新特性之一Collectors.groupingby分组和flatMap()方法)