微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – 如何使用分组映射流?

我有很长的孩子.

// 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 举报,一经查实,本站将立刻删除。

相关推荐