我有很长的孩子.
// ordered by parent.id / child.id Stream<Child> childStream;
说,
Child(id = 1,parent(id = 1)) Child(id = 2,parent(id = 1)) Child(id = 3,parent(id = 2)) Child(id = 4,parent(id = 2)) Child(id = 5,parent(id = 3))
每个孩子都有父母.
class Child { Parent parent; }
现在,我如何将流映射到Family流中?
class Family { Parent parent; List<Child> children; }
我已经知道了Collectors.groupingBy,但是流很长,将它们全部收集到Map中是不适用的.
解决方法
如果流按父(id)排序,则这是
StreamEx的解决方案.
StreamEx.of(childStream) .collapse((a,b) -> a.getParent().getId() == b.getParent().getId(),Collectors.toList()) .map(cl-> new Family(cl.get(0).getParent(),cl))...;
崩溃是比较groupy的懒惰评价.例如,如果您只想获得前5个家庭,则只会加载前5个家庭中的孩子,而不是全部.
StreamEx.of(childStream) .collapse((a,cl)) .limit(5);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。