我正在寻找帮助,当我试图迭代具有order list(OrderItem)的产品时,它也包含sub-OrderList(OrderItem)和相同的内部结构(n次)。
如何递归迭代所有订单并搜索已完成并添加了列表中所有已完成订单的操作?
我已经通过BFS/DFS做了,但正在寻找使用java函数式编程的最佳优化解决方案。蒂娅。
主要产品
Class ProductOrder
{
private List<OrderItem> orderItem = new ArrayList<OrderItem>();
}产品中的子项
其中还包含n个子项目
Class OrderItem{
private String id;
private String state;
private Integer quantity;
private List<OrderItem> orderItem = new ArrayList<OrderItem>();
}发布于 2019-10-14 03:44:49
您可以通过在OrderItem中添加以下方法来使用Stream API解决问题
public Stream<OrderItem> allItems() {
return Stream.concat(Stream.of(this), orderItem.stream().flatMap(OrderItem::allItems));
}你也可以用一种通用的方式解决这个问题:
public static <E> Stream<E> recursiveStream(
E input,
Function<? super E, ? extends Stream<? extends E>> mapper
) {
return Stream.concat(
Stream.of(input),
mapper.apply(input).flatMap(item -> recursiveStream(item, mapper))
);
}
public static <E> Stream<E> recursiveCollection(
E input,
Function<? super E, ? extends Collection<? extends E>> mapper
) {
return recursiveStream(input, mapper.andThen(Collection::stream));
}如果这个解决方案不够快,创建forEach方法,它的速度会快一点,但使用这个方法会更困难,因为你不能在它之后进行流水线操作:
public void forEach(Consumer<OrderItem> consumer) {
consumer.accept(this);
for (OrderItem item : orderItem) item.forEach(consumer);
}https://stackoverflow.com/questions/58270614
复制相似问题