Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用lambda/java8迭代递归列表_Java_List_Recursion_Optimization_Lambda - Fatal编程技术网

如何使用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);
}