Java Stream中GroupBy如何返回自定义ID列表而非对象列表?
如何在Stream分组时直接返回ID列表而非实体对象列表?
当然可以在同一行的groupBy操作中完成,只需要使用Collectors.groupingBy的重载版本,搭配Collectors.mapping作为下游收集器,一步完成分组和对象转换:
Map<Boolean, List<Long>> result = userList.stream() .collect(Collectors.groupingBy( User::getStudent, Collectors.mapping(User::getId, Collectors.toList()) ));
关键部分解析:
User::getStudent:从每个User对象中提取分组的布尔值键(是否为学生)Collectors.mapping(User::getId, Collectors.toList()):作为下游收集器,先将User对象映射为对应的Long类型id,再把所有id收集为List<Long>,最终作为Map的值
这种写法省去了额外的Stream二次处理,直接在分组阶段完成对象到id的转换,代码更简洁高效。
内容的提问来源于stack exchange,提问作者mahfuj asif
相关产品推荐
相关产品推荐

