Создать стрим, с помощью которого сделать обратный отсчет от 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::iterate(T seed, Predicate<? super T> hasNext, UnaryOperator<T> next), добавленным в Java 9, тогда можно избавиться от вызоваlimit:
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);