如何使用Java 8 Stream实现Stack Iteration

Tap*_*ose 4 java stack java-8 java-stream java-9

我有Stack<Object>一段代码:

while(!stack.isEmpty()){
    Object object = stack.pop();
    // do some operation on object
}
Run Code Online (Sandbox Code Playgroud)

如何使用Java 8 Stream实现此迭代,以便循环直到堆栈为空,并且在每次迭代中都应该通过从顶部弹出一个元素来减少堆栈?

Bri*_*etz 7

在Java 9中,将有一个3-arg版本的Stream.iterate(就像一个for循环 - 初始值,lambda用于确定输入结束,lambda用于确定下一个输入)可以做到这一点,尽管它可能是小紧张:

if (!stack.isEmpty()) {
    Stream.iterate(stack.pop(), 
                   e -> !stack.isEmpty(), 
                   e -> stack.pop())
          ...
}
Run Code Online (Sandbox Code Playgroud)