Создать стрим, с помощью которого сделать обратный отсчет от 5 до 0 (Формат сообщения «До запуска 5, 4, 3, 2, 1, 0. Пуск»

Мой уровень начальный. Решение следующее. Просьба оценить.

System.out.println("До запуска " + Stream
            .iterate(5, x -> x - 1)
            .limit(5)
            .collect(Collectors.toList())
            + ". Пуск");

Ответы (1 шт):

Автор решения: Nowhere Man

Другие варианты:

Stream<Integer> from5to1 = Stream.iterate(5, x -> x > 0, x -> x - 1);
String fiveToOne = from5to1
        .map(x -> x.toString())
        .collect(Collectors.joining(", ")); // вместо списка в []
  • IntStream::range + IntStream::map/IntStream::mapToObj:
Stream<Integer> from5to1 = IntStream.range(0, 5).map(x -> 5 - x).boxed();

String fiveToOne = IntStream.range(0, 5)
    .mapToObj(x -> Integer.toString(5 - x))
    .collect(Collectors.joining(", ")); // строка цифр, разделённых запятыми
  • Stream::generate + Stream::limit и AtomicInteger::getAndDecrement для модификации счетчика (используется стрим с состоянием (stateful)):
AtomicInteger n = new AtomicInteger(5);
Stream<Integer> from5to1 = Stream.generate(n::getAndDecrement).limit(5);

Вместо атомарного целого можно воспользоваться "ссылочным" значением:

int[] n = {5};
Stream<Integer> from5to1 = Stream.generate(() -> n[0]--).limit(5);
→ Ссылка