如何使用lambda/java8迭代递归列表
我正在寻找帮助,我正在尝试迭代具有订单如何使用lambda/java8迭代递归列表,java,list,recursion,optimization,lambda,Java,List,Recursion,Optimization,Lambda,我正在寻找帮助,我正在尝试迭代具有订单列表(OrderItem)的产品,该产品还包含子订单列表(OrderItem),并且其中还包含结构(n次)。 如何递归迭代所有订单,并搜索已完成的操作,并将所有已完成的订单添加到列表中 我已经完成了BFS/DFS,但正在寻找使用java函数编程的最佳优化解决方案。蒂亚 主要产品 Class产品订单 { private List orderItem=new ArrayList(); } 产品中的子项 里面也有n个子项 Class OrderItem{
列表(OrderItem
)的产品,该产品还包含子订单列表(OrderItem
),并且其中还包含结构(n次)。
如何递归迭代所有订单,并搜索已完成的操作,并将所有已完成的订单添加到列表中
我已经完成了BFS/DFS,但正在寻找使用java函数编程的最佳优化解决方案。蒂亚
主要产品
Class产品订单
{
private List orderItem=new ArrayList();
}
产品中的子项
里面也有n个子项
Class OrderItem{
private String id;
private String state;
private Integer quantity;
private List<OrderItem> orderItem = new ArrayList<OrderItem>();
}
类OrderItem{
私有字符串id;
私有字符串状态;
私有整数数量;
private List orderItem=new ArrayList();
}
您可以通过将以下方法添加到OrderItem
来解决问题:
public Stream<OrderItem> allItems() {
return Stream.concat(Stream.of(this), orderItem.stream().flatMap(OrderItem::allItems));
}
到目前为止,您尝试了什么?我尝试了DFS和BFS方式,可以在3到1毫秒的时间内达到。正在寻找在Java 8上使用函数式编程的有效方式。@Naman:您能帮我一下吗?我想,到目前为止,还没有人有答案!!
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));
}
public void forEach(Consumer<OrderItem> consumer) {
consumer.accept(this);
for (OrderItem item : orderItem) item.forEach(consumer);
}