加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 04:41:39 所属栏目:Java 来源:网络整理
导读:我有很长的孩子. // ordered by parent.id / child.idStreamChild 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)) 每个孩子都有父母. c
我有很长的孩子.

// 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);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读