< prev index next >

src/java.base/share/classes/java/util/stream/IntStream.java

Print this page

        

*** 1,7 **** /* ! * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this --- 1,7 ---- /* ! * Copyright (c) 2012, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this
*** 883,914 **** * element at position {@code n - 1}. * * @param seed the initial element * @param f a function to be applied to the previous element to produce * a new element ! * @return A new sequential {@code IntStream} */ public static IntStream iterate(final int seed, final IntUnaryOperator f) { Objects.requireNonNull(f); ! final PrimitiveIterator.OfInt iterator = new PrimitiveIterator.OfInt() { ! int t = seed; @Override ! public boolean hasNext() { return true; } @Override ! public int nextInt() { ! int v = t; t = f.applyAsInt(t); ! return v; } }; ! return StreamSupport.intStream(Spliterators.spliteratorUnknownSize( ! iterator, ! Spliterator.ORDERED | Spliterator.IMMUTABLE | Spliterator.NONNULL), false); } /** * Returns an infinite sequential unordered stream where each element is * generated by the provided {@code IntSupplier}. This is suitable for --- 883,990 ---- * element at position {@code n - 1}. * * @param seed the initial element * @param f a function to be applied to the previous element to produce * a new element ! * @return a new sequential {@code IntStream} */ public static IntStream iterate(final int seed, final IntUnaryOperator f) { Objects.requireNonNull(f); ! Spliterator.OfInt spliterator = new Spliterators.AbstractIntSpliterator(Long.MAX_VALUE, ! Spliterator.ORDERED | Spliterator.IMMUTABLE | Spliterator.NONNULL) { ! int prev; ! boolean started; @Override ! public boolean tryAdvance(IntConsumer action) { ! Objects.requireNonNull(action); ! int t; ! if (started) ! t = f.applyAsInt(prev); ! else { ! t = seed; ! started = true; ! } ! action.accept(prev = t); ! return true; ! } ! }; ! return StreamSupport.intStream(spliterator, false); ! } ! ! /** ! * Returns a sequential ordered {@code IntStream} produced by iterative ! * application of a function to an initial element, conditioned on ! * satisfying the supplied predicate. The stream terminates as soon as ! * the predicate function returns false. ! * ! * <p> ! * {@code IntStream.iterate} should produce the same sequence of elements ! * as produced by the corresponding for-loop: ! * <pre>{@code ! * for (int index=seed; predicate.test(index); index = f.apply(index)) { ! * ... ! * } ! * }</pre> ! * ! * <p> ! * The resulting sequence may be empty if the predicate does not hold on ! * the seed value. Otherwise the first element will be the supplied seed ! * value, the next element (if present) will be the result of applying the ! * function f to the seed value, and so on iteratively until the predicate ! * indicates that the stream should terminate. ! * ! * @param seed the initial element ! * @param predicate a predicate to apply to elements to determine when the ! * stream must terminate. ! * @param f a function to be applied to the previous element to produce ! * a new element ! * @return a new sequential {@code IntStream} ! * @since 9 ! */ ! public static IntStream iterate(int seed, IntPredicate predicate, IntUnaryOperator f) { ! Objects.requireNonNull(f); ! Objects.requireNonNull(predicate); ! Spliterator.OfInt spliterator = new Spliterators.AbstractIntSpliterator(Long.MAX_VALUE, ! Spliterator.ORDERED | Spliterator.IMMUTABLE | Spliterator.NONNULL) { ! int prev; ! boolean started, finished; ! ! @Override ! public boolean tryAdvance(IntConsumer action) { ! Objects.requireNonNull(action); ! if (finished) ! return false; ! int t; ! if (started) ! t = f.applyAsInt(prev); ! else { ! t = seed; ! started = true; ! } ! if (!predicate.test(t)) { ! finished = true; ! return false; ! } ! action.accept(prev = t); return true; } @Override ! public void forEachRemaining(IntConsumer action) { ! Objects.requireNonNull(action); ! if (finished) ! return; ! finished = true; ! int t = started ? f.applyAsInt(prev) : seed; ! while (predicate.test(t)) { ! action.accept(t); t = f.applyAsInt(t); ! } } }; ! return StreamSupport.intStream(spliterator, false); } /** * Returns an infinite sequential unordered stream where each element is * generated by the provided {@code IntSupplier}. This is suitable for
< prev index next >