web-dev-qa-db-ja.com

配列からストリームを作成するにはどうすればよいですか?

現在、配列からストリームを作成する必要があるときはいつでも、

String[] array = {"x1", "x2"};
Arrays.asList(array).stream();

配列からストリームを作成する直接的な方法はありますか?

123
adam.kubi

@ sol4meのソリューションの代替:

Stream.of(theArray)

これとArrays.stream()の違い:it does配列がプリミティブ型の場合、違いが生じます。たとえば、次の場合:

Arrays.stream(someArray)

someArraylong[]である場合、LongStreamを返します。一方、Stream.of()は、単一の要素を持つStream<long[]>を返します。

41
fge
Stream.of("foo", "bar", "baz")

または、すでに配列がある場合は、次のこともできます

Stream.of(array) 

プリミティブ型には、IntStream.ofまたはLongStream.ofなどを使用します。

13
Dima

Arrays.streamを使用できます:

Arrays.stream(array); 

これにより、String []Stream<String>を返し、int []IntStreamを返す場合、配列入力タイプに基づいてSteamの戻りタイプが保証されます

入力タイプの配列が既にわかっている場合は、入力タイプint[]のような特定の配列を使用するとよいでしょう

 IntStream.of(array); 

これにより、Intstreamが返されます。

最初の例では、Javaはメソッドoverloadingを使用して入力タイプに基づいて特定のメソッドを検索しますが、2番目の例では入力タイプを既に知っており、特定のメソッドを呼び出しています。

0
vipul patel

並列オプションがある低レベルの方法でも作成できます。

更新:完全なarray.lengthを使用します(長さ-1ではありません)。

/** 
 * 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)
0
merqlove