Hi Stuart,

I had prepared an alternative rendition stashed away just in case this came up 
:-)

I still want to retain a punchy short first paragraph. What do you think about 
the following?

     Stream<T> skip(long n);
 
     /**
-     * Returns a stream consisting of the longest prefix of elements taken from
-     * this stream that match the given predicate.
+     * Returns a stream consisting of elements taken from this stream that 
match
+     * the given predicate.
      *
-     * <p>If this stream is ordered then the prefix is a contiguous sequence of
-     * elements of this stream.  All elements of the sequence match the given
-     * predicate, the first element of the sequence is the first element
-     * (if any) of this stream, and the element (if any) immediately following
-     * the last element of the sequence does not match the given predicate.
+     * <p>If this stream is ordered then the longest prefix of elements is
+     * taken from this stream.  The prefix is a contiguous sequence of elements
+     * of this stream. All elements of the sequence match the given predicate.
+     * The first element of the sequence is the first element (if any) of this
+     * stream, and the element (if any) immediately following the last element
+     * of the sequence does not match the given predicate.
      *
-     * <p>If this stream is unordered then the prefix is a subset of elements 
of
+     * <p>If this stream is unordered then a subset of elements is taken from
      * this stream.  All elements (if any) of the subset match the given
      * predicate.  In this case the behavior of this operation is
-     * nondeterministic; it is free to select any valid subset as the prefix.
+     * nondeterministic; it is free to take any valid subset.
      *
      * <p>This is a <a href="package-summary.html#StreamOps">short-circuiting
      * stateful intermediate operation</a>.
@@ -521,8 +522,8 @@
      *
      * @param predicate a <a 
href="package-summary.html#NonInterference">non-interfering</a>,
      *                  <a 
href="package-summary.html#Statelessness">stateless</a>
-     *                  predicate to apply to elements to determine the longest
-     *                  prefix of elements.
+     *                  predicate to apply to elements to determine if they
+     *                  should be taken.
      * @return the new stream
      */
     default Stream<T> takeWhile(Predicate<? super T> predicate) {
@@ -535,20 +536,20 @@
     }
 
     /**
-     * Returns a stream consisting of the remaining elements of this stream
-     * after dropping the longest prefix of elements that match the given
-     * predicate.
+     * Returns a stream consistent of the remaining elements of this stream
+     * after dropping elements that match the given predicate.
      *
-     * <p>If this stream is ordered then the prefix is a contiguous sequence of
-     * elements of this stream.  All elements of the sequence match the given
-     * predicate, the first element of the sequence is the first element
-     * (if any) of this stream, and the element (if any) immediately following
-     * the last element of the sequence does not match the given predicate.
+     * <p>If this stream is ordered then the longest prefix of elements is
+     * dropped from this stream.  The prefix is a contiguous sequence of
+     * elements of this stream. All elements of the sequence match the given
+     * predicate. The first element of the sequence is the first element (if
+     * any) of this stream, and the element (if any) immediately following the
+     * last element of the sequence does not match the given predicate.
      *
-     * <p>If this stream is unordered then the prefix is a subset of elements 
of
+     * <p>If this stream is unordered then a subset of elements is dropped from
      * this stream.  All elements (if any) of the subset match the given
      * predicate.  In this case the behavior of this operation is
-     * nondeterministic; it is free to select any valid subset as the prefix.
+     * nondeterministic; it is free to take any valid subset.
      *
      * <p>This is a <a href="package-summary.html#StreamOps">stateful
      * intermediate operation</a>.
@@ -577,8 +578,8 @@
      *
      * @param predicate a <a 
href="package-summary.html#NonInterference">non-interfering</a>,
      *                  <a 
href="package-summary.html#Statelessness">stateless</a>
-     *                  predicate to apply to elements to determine the longest
-     *                  prefix of elements.
+     *                  predicate to apply to elements to determine if they
+     *                  should be dropped.
      * @return the new stream
      */
     default Stream<T> dropWhile(Predicate<? super T> predicate) {

Paul.

On Jun 3, 2015, at 4:05 AM, Stuart Marks <stuart.ma...@oracle.com> wrote:

> Hi Paul,
> 
> Some comments on the spec.
> 
> On 6/2/15 6:13 AM, Paul Sandoz wrote:
>>   
>> 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:
> 
> I see what you're trying to do here. The first sentence of a doc comment is 
> special and so it needs to describe concisely but very generally what the 
> method is trying to do.
> 
> The problem is that the first sentence is flatly contradicted by the third 
> paragraph. If the stream is unordered "longest prefix" is completely 
> ill-defined. "Prefix" is nonsensical for an unordered stream, but the third 
> paragraph attempts to redefine it to fit. "Longest" doesn't apply, since any 
> subset may be returned.
> 
> Maybe the thing to do just give up on the idea of the first sentence trying 
> to cover the semantics for both ordered and unordered streams. The problem is 
> that something like "takeWhile" is really mostly applicable to ordered 
> streams, so in the first paragraph just give people what they're expecting to 
> see. Then have the second paragraph cover the case of unordered streams.
> 
> Maybe something like this:
> 
> ----------
> If this stream is ordered, returns a stream consisting of the longest prefix 
> of elements taken from this stream, where the elements all match the given 
> predicate. The prefix is a contiguous sequence of elements of this stream.  
> The first element of the sequence is the first element (if any) of this 
> stream, and the element (if any) immediately following the last element of 
> the sequence does not match the given predicate.
> 
> If this stream is unordered, this method returns a subset of elements of this 
> stream.  All elements (if any) of the subset match the given predicate.  In 
> this case the behavior of this operation is nondeterministic; it is free to 
> select any valid subset of elements that match the predicate.
> ----------
> 
> s'marks
> 

Reply via email to