Very nice. I just looked over the spec, for now.
* @param predicate a <a
href="package-summary.html#NonInterference">non-interfering</a>,
* <a
href="package-summary.html#Statelessness">stateless</a>
* predicate to apply elements to determine the longest
* prefix of elements.
Is this missing a *to*, “… predicate to apply to elements to determine the …"
-Chris.
On 2 Jun 2015, at 14:13, Paul Sandoz <[email protected]> wrote:
> Hi,
>
> Please review this webrev that adds take/dropWhile operations to streams:
>
> http://cr.openjdk.java.net/~psandoz/jdk9/JDK-8071597-take-drop-while/webrev/
>
> I opted to weight the documentation of the operations towards ordered streams
> in the first paragraph. That is what makes most sense in terms of usage and
> what most people will read. Thus i refer to the "longest prefix" in the first
> paragraph then define what that means in subsequent paragraphs for ordered
> and unordered streams:
>
> 482 /**
> 483 * Returns a stream consisting of the longest prefix of elements
> taken from
> 484 * this stream that match the given predicate.
> 485 *
> 486 * <p>If this stream is ordered then the prefix is a contiguous
> sequence of
> 487 * elements of this stream. All elements of the sequence match the
> given
> 488 * predicate, the first element of the sequence is the first element
> 489 * (if any) of this stream, and the element (if any) immediately
> following
> 490 * the last element of the sequence does not match the given
> predicate.
> 491 *
> 492 * <p>If this stream is unordered then the prefix is a subset of
> elements of
> 493 * this stream. All elements (if any) of the subset match the given
> 494 * predicate. In this case the behavior of this operation is
> 495 * nondeterministic; it is free to select any valid subset as the
> prefix.
> 496 *
> 497 * <p>This is a <a
> href="package-summary.html#StreamOps">short-circuiting
> 498 * stateful intermediate operation</a>.
> 499 *
> ...
> 528 default Stream<T> takeWhile(Predicate<? super T> predicate) {
>
> 537 /**
> 538 * Returns a stream consisting of the remaining elements of this
> stream
> 539 * after dropping the longest prefix of elements that match the given
> 540 * predicate.
> 541 *
> 542 * <p>If this stream is ordered then the prefix is a contiguous
> sequence of
> 543 * elements of this stream. All elements of the sequence match the
> given
> 544 * predicate, the first element of the sequence is the first element
> 545 * (if any) of this stream, and the element (if any) immediately
> following
> 546 * the last element of the sequence does not match the given
> predicate.
> 547 *
> 548 * <p>If this stream is unordered then the prefix is a subset of
> elements of
> 549 * this stream. All elements (if any) of the subset match the given
> 550 * predicate. In this case the behavior of this operation is
> 551 * nondeterministic; it is free to select any valid subset as the
> prefix.
> 552 *
> ...
> 584 default Stream<T> dropWhile(Predicate<? super T> predicate) {
>
>
> After this has been reviewed i will follow up with a further issue regarding
> the specification of takeWhile, stateful predicates and cancellation. I
> avoided such specification here as it's likely to rathole :-)
>
> Basically the takeWhile operation is implemented such that one can do:
>
> long t = System.currentTimeMillis();
> List<BigInteger> pps = Stream
> .generate(() -> BigInteger.probablePrime(1024,
> ThreadLocalRandom.current()))
> .parallel()
> .takeWhile(e -> (System.currentTimeMillis() - t) <
> TimeUnit.SECONDS.toMillis(5))
> .collect(toList());
>
> Paul.