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

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

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

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容