【发布时间】:2018-06-17 04:10:10
【问题描述】:
我有一个很长的孩子流。
// 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))
每个Child 都有一个父级。
class Child {
Parent parent;
}
现在,如何将流映射到Family 的流?
class Family {
Parent parent;
List<Child> children;
}
我已经知道Collectors.groupingBy,但是流太长了,无法将它们全部收集到Map 中。
【问题讨论】:
-
@YCF_L 如果
Map<Parent, List<Child>>只包含一个条目,没关系。流这么大。 -
这个流是从哪里来的?定义“很长”。
-
您必须处理
Stream的所有Child实例才能构造Family实例。即使你只想获取Stream<Family>中的第一个Family,也无法避免处理整个Stream<Child>。 -
Parent和Child类型是什么?在我看来就像一棵树。这将需要在groupingBy或自定义收集器之后进行一些后处理。此外,是否保证输入列表按照您的示例进行排序(广度优先)?否则,就没有办法懒惰地分组,因为在列表的最后可能有第一个孩子的孩子。 -
@JBNizet 查询来自事件日志表。长度取决于输入循环,但除缩减之外的任何终端节都不适用。
标签: java mapping java-stream