1
0

More than 3 years have passed since last update.

Javaでプリミティブ型の配列からStreamを生成

Last updated at Posted at 2019-11-23

charbooleanなどのプリミティブ型の配列を使う時がある.
配列に対してStream APIを用いると簡潔に操作できることが多い.
しかしArrays#streamint,long,double以外のプリミティブな配列に対して適用できないので,そういう場合の対処法を備忘録的に書き留めておく.

始めからラッパークラスを使う

Arrays#streamは任意のオブジェクト型の配列に対して使用できるので,ラッパークラスを使う方法.

final Character[] array = {...};
Arrays.stream(array)
      ...

IntStreamでインデックスを生成してマップする

本命
IntStream#rangeで対象の配列分のインデックスを生成しそれらを配列の要素にマップする方法.

final char[] array = {...};
IntStream.range(0, array.length) // rangeClosedでないことに注意
         .mapToObj(i -> array[i])
         ...

おまけ

二重配列に対して一括でstreamによる操作をしたい時はStream#flatMapが便利
例: boolean型二重配列の全ての要素がtrueかを調べたい.

public void run() {
  ...
  final boolean[][] table = ...;
  Arrays.stream(table)
        .flatMap(this::flatten)
        .allMatch(Boolean::booleanValue);
}

private Stream<Boolean> flatten(final boolean[] array) {
  return IntStream.range(0, array.length)
                  .mapToObj(i -> array[i]);
}
1
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0