美文网首页
自定义数据结构支持Stream API(挖坑)

自定义数据结构支持Stream API(挖坑)

作者: 风干鸡 | 来源:发表于2017-02-07 12:05 被阅读0次

今天在V2EX上面看到一个招聘的帖子,附了一个面试题,面试题本身比较简单。

[整数数字转读音]
string num2Voice(int num) { … }
例:输入: 12345 输出:一万二千三百四十五
(时间 20min 内完成代码并能够跑通)

答案:(我的答案,非标准答案)

public class Test {
    String num2Voice(int num) {
        return toList(split(num)).stream().map(x -> numbers[x.val] + units[x.index]).reduce(String::concat).orElse("");
    }

    class X {
        int val;
        int index;

        X(int val, int index) {
            this.val = val;
            this.index = index;
        }
    }

    Stack<X> split(int num) {
        Stack<X> stack = new Stack<>();
        int index = 0;
        while (num > 0) {
            int val = num % 10;
            stack.push(new X(val, index));
            num /= 10;
            index++;
        }
        return stack;
    }

    <E> List<E> toList(Stack<E> stack) {
        ArrayList<E> r = new ArrayList<>();
        while (!stack.isEmpty()) {
            r.add(stack.pop());
        }
        return r;
    }


    static String[] numbers = {"零", "一", "二", "三", "四", "五", "六", "七", "八", "九"};
    static String[] units = {"", "十", "百", "千","万", "十万", "百万", "千万", "亿"};

    public static void main(String[] args){
        System.out.println(new Test().num2Voice(12345));
    }
}

因此发现一个问题,自带的Stack的Stream竟然是顺序的,导致我虽然用的栈,仍然需要手动把他反过来。直觉上来说,stack的流应该和插入顺序相反,所以准备自定一个Stack支持Stream API。

相关文章

网友评论

      本文标题:自定义数据结构支持Stream API(挖坑)

      本文链接:https://www.haomeiwen.com/subject/xrwpittx.html