StreamShape.java revision 603700058363f21b7b2ecae9c44e9617183ab3f9
1/*
2 * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.  Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25package java.util.stream;
26
27/**
28 * An enum describing the known shape specializations for stream abstractions.
29 * Each will correspond to a specific subinterface of {@link BaseStream}
30 * (e.g., {@code REFERENCE} corresponds to {@code Stream}, {@code INT_VALUE}
31 * corresponds to {@code IntStream}).  Each may also correspond to
32 * specializations of value-handling abstractions such as {@code Spliterator},
33 * {@code Consumer}, etc.
34 *
35 * @apiNote
36 * This enum is used by implementations to determine compatibility between
37 * streams and operations (i.e., if the output shape of a stream is compatible
38 * with the input shape of the next operation).
39 *
40 * <p>Some APIs require you to specify both a generic type and a stream shape
41 * for input or output elements, such as {@link TerminalOp} which has both
42 * generic type parameters for its input types, and a getter for the
43 * input shape.  When representing primitive streams in this way, the
44 * generic type parameter should correspond to the wrapper type for that
45 * primitive type.
46 *
47 * @since 1.8
48 * @hide Visible for CTS testing only (OpenJDK8 tests).
49 */
50public enum StreamShape {
51    /**
52     * The shape specialization corresponding to {@code Stream} and elements
53     * that are object references.
54     */
55    REFERENCE,
56    /**
57     * The shape specialization corresponding to {@code IntStream} and elements
58     * that are {@code int} values.
59     */
60    INT_VALUE,
61    /**
62     * The shape specialization corresponding to {@code LongStream} and elements
63     * that are {@code long} values.
64     */
65    LONG_VALUE,
66    /**
67     * The shape specialization corresponding to {@code DoubleStream} and
68     * elements that are {@code double} values.
69     */
70    DOUBLE_VALUE
71}
72