LoginSignup
5
4

More than 3 years have passed since last update.

null かもしれない配列をストリームに変換する

Posted at

毎回ちょっと悩むので備忘録として書いておく

まとめ

orElse で空のストリームを返す、というアイデアだけ覚えておけばOK

まとめ
Optional.ofNullable(arr)
  .map(Arrays::stream).orElse(Stream.empty())
  .forEach(System.out::println);

詳細

やりたいこと

null の可能性がある配列に対してストリーム処理をしたい。

問題

拡張 for 文や Arrays#streamStream#of は null セーフではない。
でも毎回 null チェックするのは面倒。

for文を使う場合
String[] arr = null;

for (String s : arr) { // ここで NullPointerException 
  System.out.println(s);
}
Arraysを使う場合
String[] arr = null;

Arrays.stream(arr) // ここで NullPointerException
  .forEach(System.out::println);

// Stream#of も内部で Arrays#stream を使っているらしく
Stream.of(arr) // ここで NullPointerException
  .forEach(System.out::println);

Optional を使う

  • Arrays#stream で配列をストリームに変換
  • Optional が空のときは Stream#empty で空のストリームを返す
Optionalを使う場合
String[] arr = null;

Optional.ofNullable(arr)     // この時点で Optional<String[]>
     .map(Arrays.stream)     // この時点で Optional<Stream<String>>
     .orElse(Stream.empty()) // この時点で Stream<String>, 配列の中身のストリーム
     .forEach(System.out::println);
5
4
2

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
5
4