現在、配列からストリームを作成する必要があるときはいつでも、
String[] array = {"x1", "x2"};
Arrays.asList(array).stream();
配列からストリームを作成する直接的な方法はありますか?
@ sol4meのソリューションの代替:
Stream.of(theArray)
これとArrays.stream()
の違い:it does配列がプリミティブ型の場合、違いが生じます。たとえば、次の場合:
Arrays.stream(someArray)
someArray
がlong[]
である場合、LongStream
を返します。一方、Stream.of()
は、単一の要素を持つStream<long[]>
を返します。
Stream.of("foo", "bar", "baz")
または、すでに配列がある場合は、次のこともできます
Stream.of(array)
プリミティブ型には、IntStream.of
またはLongStream.of
などを使用します。
Arrays.streamを使用できます:
Arrays.stream(array);
これにより、String []
がStream<String>
を返し、int []
がIntStream
を返す場合、配列入力タイプに基づいてSteamの戻りタイプが保証されます
入力タイプの配列が既にわかっている場合は、入力タイプint[]
のような特定の配列を使用するとよいでしょう
IntStream.of(array);
これにより、Intstreamが返されます。
最初の例では、Javaはメソッドoverloading
を使用して入力タイプに基づいて特定のメソッドを検索しますが、2番目の例では入力タイプを既に知っており、特定のメソッドを呼び出しています。
並列オプションがある低レベルの方法でも作成できます。
/**
* Creates a new sequential or parallel {@code Stream} from a
* {@code Spliterator}.
*
* <p>The spliterator is only traversed, split, or queried for estimated
* size after the terminal operation of the stream pipeline commences.
*
* @param <T> the type of stream elements
* @param spliterator a {@code Spliterator} describing the stream elements
* @param parallel if {@code true} then the returned stream is a parallel
* stream; if {@code false} the returned stream is a sequential
* stream.
* @return a new sequential or parallel {@code Stream}
*
* <T> Stream<T> stream(Spliterator<T> spliterator, boolean parallel)
*/
StreamSupport.stream(Arrays.spliterator(array, 0, array.length), true)