在lambda中使用的堆栈是打印FIFO

在lambda中使用的堆栈是打印FIFO,lambda,java-8,Lambda,Java 8,我正在尝试将十进制值转换为二进制值,我使用堆栈作为数据结构。当使用普通的堆栈pop时,它以正确的顺序打印我,例如4,二进制转换将为100。但我对java 8还不熟悉,我试图尽可能多地使用lambda来学习,在学习过程中,我意识到它的打印FIFO ex for 4它正在打印001。 请找到下面的代码,让我知道我哪里做错了 package com.interview.random; import java.util.Stack; public class ConvertDecimalToBina

我正在尝试将十进制值转换为二进制值,我使用堆栈作为数据结构。当使用普通的堆栈pop时,它以正确的顺序打印我,例如4,二进制转换将为100。但我对java 8还不熟悉,我试图尽可能多地使用lambda来学习,在学习过程中,我意识到它的打印FIFO ex for 4它正在打印001。 请找到下面的代码,让我知道我哪里做错了

package com.interview.random;

import java.util.Stack;

public class ConvertDecimalToBinary {

public Stack<Integer> convertToBinary(int num){
    Stack<Integer> st=new Stack<>();
    while(num>1){
        st.push(num%2);
        num=num/2;
    }
    st.push(num);
    return st;
}

public static void main(String[] args) {
    // TODO Auto-generated method stub

    Stack<Integer> st=new ConvertDecimalToBinary().convertToBinary(4);

    //printing correctly
    while(!st.isEmpty()){
        System.out.println(st.pop());
    }

    //Printing in FIFO not correct 
    st.forEach(i->System.out.println(i));
}
package com.interview.random;
导入java.util.Stack;
公共类十进制{
公共堆栈convertToBinary(int num){
Stack st=新堆栈();
while(num>1){
st.push(数量%2);
num=num/2;
}
st.push(num);
返回st;
}
公共静态void main(字符串[]args){
//TODO自动生成的方法存根
堆栈st=新ConvertDecimalToBinary().convertToBinary(4);
//正确打印
而(!st.isEmpty()){
System.out.println(st.pop());
}
//在FIFO中打印不正确
st.forEach(i->System.out.println(i));
}

}堆栈的迭代顺序为FIFO。中没有明确规定这一点,但实现就是这样做的

然而,政府确实这样说:

Deque
接口及其实现提供了一套更完整、更一致的后进先出堆栈操作,应优先于此类使用

提供两个迭代器,一个用于FIFO顺序,另一个用于LIFO顺序。
Deque::forEach
方法被指定为按FIFO顺序访问,但您可以这样做:


dq.reverseIterator().ForEachLeving(i->System.out.println(i))

堆栈的迭代顺序为FIFO。中没有明确规定这一点,但实现就是这样做的

然而,政府确实这样说:

Deque
接口及其实现提供了一套更完整、更一致的后进先出堆栈操作,应优先于此类使用

提供两个迭代器,一个用于FIFO顺序,另一个用于LIFO顺序。
Deque::forEach
方法被指定为按FIFO顺序访问,但您可以这样做:


dq.reverseIterator().ForEachLeving(i->System.out.println(i))

Stack在LIFO上工作,当我使用Stack.pop()时,我尝试对上面的代码使用Stack。上面的代码得到的结果是100,而lambda表达式得到的结果是001。为什么会这样?Stack在后进先出中工作,我在使用Stack.pop()时尝试对上面的代码使用Stack。使用上面的代码得到的结果是100,使用lambda表达式得到的结果是001。为什么会这样?Stack在后进先出中工作,我在使用Stack.pop()时尝试对上面的代码使用Stack。使用上面的代码得到的结果是100,使用lambda表达式得到的结果是001。为什么会这样?你的意思是说堆栈并不总是后进先出?我已经解释过了。
堆栈的迭代顺序为FIFO。但是(显然)当您使用
push
pop
时,顺序是后进先出。因此每个堆栈的期望(预期结果)是FIFO?不要忘记,
java.util.stack
只是一个扩展的
java.util.Vector
,提供了一些在列表末尾添加和删除的方法。多次调用
push(…)
与多次调用
add(…)
Vector没有什么不同。forEach(…)
仍然按照元素添加的顺序迭代元素。当您查看时,您可以清楚地看到哪些方法是由
Stack
添加或重写的,哪些是从
Vector
继承的。所有继承的方法仍然具有列表语义。Stack在LIFO上工作,当我使用Stack.pop()时,我尝试对上面的代码使用Stack。使用上面的代码得到的结果是100,使用lambda表达式得到的结果是001。为什么会这样?你的意思是说堆栈并不总是后进先出?我已经解释过了。
堆栈的迭代顺序为FIFO。但是(显然)当您使用
push
pop
时,顺序是后进先出。因此每个堆栈的期望(预期结果)是FIFO?不要忘记,
java.util.stack
只是一个扩展的
java.util.Vector
,提供了一些在列表末尾添加和删除的方法。多次调用
push(…)
与多次调用
add(…)
Vector没有什么不同。forEach(…)
仍然按照元素添加的顺序迭代元素。当您查看时,您可以清楚地看到哪些方法是由
Stack
添加或重写的,哪些是从
Vector
继承的。所有继承的方法仍然具有列表语义。