Как получить серии Фибоначчи от 1 до 100, используя Java Streams, и добавить их в карту - PullRequest
1 голос
/ 01 марта 2020

Я могу написать этот код, используя обычный подход. Но используя потоки, я пытался вот так, но здесь не работает ограничение для этого диапазона и метод IntStream.range (), который я не могу использовать здесь.

Stream.iterate(new int[]{0,1}, f -> new int[]{f[1], f[0]+f[1]})
        .limit(10)
        .map(n -> n[0])
        .forEach(System.out::println);
        //.collect(Collectors.toList());

Пожалуйста, ответьте.

1 Ответ

5 голосов
/ 01 марта 2020

Вы можете использовать любую версию Java новее 8, затем takeWhile и dropWhile:

import java.util.stream.Stream;

public class Temp {
    public static void main(String [] args){
        Stream
                //Generate a stream of arrays like this {0,1}, {1, 1}, {1, 2}, {2, 3}, {3, 5}...etc.
                .iterate(new int[] { 0, 1 }, f -> new int[] { f[1], f[0] + f[1] })
                //Keep only the 1st element of each array.
                .map(n -> n[0])
                //Drop only 0.
                .dropWhile(i -> i < 1)
                //Take any number which is <= 100.
                .takeWhile(i -> i <= 100)
                .forEach(System.out::println);
    }

}

Конечно, можно избежать dropWhile, используя { 1, 2 } в качестве начального числа .

Java 8 не предлагает основанный на предикатах способ ограничения / остановки потока, поэтому я остановлюсь на al oop в этой версии.

...