如何测试它是否是斐波纳契流?

时间:2015-03-29 15:02:17

标签: java-8 java-stream short-circuiting

这不是斐波那契流。

LongStream digits = LongStream.of(0, 1, 2 , 3 , 4, 5, 6, 7, 8, 9);

这也不是。

LongStream naturals = LongStream.iterate(1,  (i) -> i + 1);

但是,你怎么检查它们不是?

请注意,第二个流是无限的,因此您需要一些短路操作才能尽快停止。不幸的是,短路方法'allMatch'和'anyMatch'只测试元素,而不是序列。

1 个答案:

答案 0 :(得分:2)

使用番石榴Iterables.elementsEqual

Supplier<Integer> fibonacci = new Supplier<Integer>() {
        int first = 0;
        int second = 1;

        @Override
        public Integer get() {
            int result = first + second;
            first = second;
            second = result;
            return first;
        }
    };
boolean isMatch = Iterables.elementsEqual(
                     toTest, 
                     Stream.generate(fibonacci).limit(toTest.size()).collect(Collectors.toList()));