Loose end: concat

Brian Goetz brian.goetz at oracle.com
Tue May 28 09:51:24 PDT 2013


No, sorry to be unclear.  The second example suggests *STATIC* methods 
on *Stream:

   static<T> Stream<T> concat(Stream<? extends T> a,
                              Stream<? extends T> b)

The signatures would be the same, the only difference is what class 
these static methods would live in.



On 5/28/2013 12:44 PM, Joe Bowbeer wrote:
> I like the second, still, for its fluency. I didn't understand your
> stateful-based argument. Are you backing away from it?
>
> On May 28, 2013 9:35 AM, "Brian Goetz" <brian.goetz at oracle.com
> <mailto:brian.goetz at oracle.com>> wrote:
>
>     Seems we've seen no objections on the existence of these methods.
>       So the remaining issue is where they live.
>
>     Candidates:
>
>        Streams.concat(a, b) x 4
>        Stream.concat(a, b), IntStream.concat(a, b), etc.
>
>     Over time, we've been moving away from "overloaded" stream methods
>     towards more explicitly typed methods, which is a point against the
>     first candidate.
>
>     I initially preferred the first version, but am more on the fence
>     now. Sam prefers the second.  Other opinions?
>
>
>     On 5/23/2013 2:06 PM, Brian Goetz wrote:
>
>         I cleaned up concat() and wrote Int/Long/Double versions.
>           (Fortunately,
>         with the recent addition of Spliterator.OfPrimitive, the duplication
>         quotient was much lower.)
>
>         Currently these still live in Streams.  Is that still the right
>         place?
>         The stream classes (Stream, IntStream, etc) seem a little wrong for
>         them, but I can't quite put my finger on why.
>
>         Specs:
>
>               /**
>                * Creates a lazy concatenated {@code Stream} whose
>         elements are
>         all the
>                * elements of a first {@code Stream} succeeded by all the
>         elements
>         of the
>                * second {@code Stream}. The resulting stream is ordered
>         if both
>                * of the input streams are ordered, and parallel if
>         either of the
>         input
>                * streams is parallel.
>                *
>                * @param <T> The type of stream elements
>                * @param a the first stream
>                * @param b the second stream to concatenate on to end of
>         the first
>                *        stream
>                * @return the concatenation of the two input streams
>                */
>               public static <T> Stream<T> concat(Stream<? extends T> a,
>         Stream<?
>         extends T> b) {
>
>
>               /**
>                * Creates a lazy concatenated {@code IntStream} whose
>         elements are
>         all the
>                * elements of a first {@code IntStream} succeeded by all the
>         elements of the
>                * second {@code IntStream}. The resulting stream is
>         ordered if both
>                * of the input streams are ordered, and parallel if
>         either of the
>         input
>                * streams is parallel.
>                *
>                * @param a the first stream
>                * @param b the second stream to concatenate on to end of
>         the first
>         stream
>                * @return the concatenation of the two streams
>                */
>               public static IntStream concat(IntStream a, IntStream b) {
>
>
>         (and similar for Long and Double).
>


More information about the lambda-libs-spec-observers mailing list