在lambda中使用堆栈时打印FIFO

时间:2018-01-04 05:41:13

标签: lambda java-8

我正在尝试将十进制转换为二进制值,我已将Stack用作我的数据结构。当使用正常的堆栈弹出时,它以正确的顺序打印我4,二进制转换将为100.但我是java 8的新手,并尝试尽可能多地使用lambda来学习并在执行过程中,我意识到它的打印FIFO为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));
}

}

1 个答案:

答案 0 :(得分:2)

Stack的迭代顺序是FIFO。这在Stack javadocs中没有明确规定,但这就是实施的目的。

但是,Stack javadocs 这样说:

  

&#34; Deque接口及其实现提供了一套更完整,更一致的LIFO堆栈操作,应该优先使用这个类。&#34;

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

dq.reverseIterator()forEachRemaining(I-&GT;的System.out.println(I));