
Java8がリリースされてからあと半年ほどで2年になります。Java8の目玉でもあったラムダとStreamも大分浸透してきたのではないでしょうか。
今回はJava8のStreamについて解説していきます。
このページを見てる方がStream初めてだという方が多いと思いますので、なるべく簡単に基本的なことだけを説明していきます。
Streamってなに?
詳しくはググってください。w
恐らくプログラマの方がこのページを見ているのであれば、ソースを見たほうがはやいかと思います。
今回はList等のコレクションクラスの操作をStreamに置き換えてfor文無しでループ処理をするようにしています。
Streamを使わないループ
例えば、Integerのリストの中味を1つずつ表示するにはこのようにfor文でループさせるのが今までのやり方でした。
List<Integer> list = new ArrayList<>(); list.add(new Integer(1)); list.add(new Integer(2)); list.add(new Integer(3)); for (Integer i : list) { System.out.println("[" + i + "]"); }
Streamを使ったループ
それがStreamを使うことによってfor文でループさせずに1行でリストの中味を全て表示することができるようになりました。
List<Integer> list = new ArrayList<>(); list.add(new Integer(1)); list.add(new Integer(2)); list.add(new Integer(3)); list.stream() .forEach((Integer i) -> System.out.println("[" + i + "]"));
Streamの書き方は色々あるよ
上のソースコードを見てアレと思った人もいるはず。
forEachの引数は省略して書くことができるので、他のサイトでは違う書き方をしていることもあります。
こちら全てStreamを使った記述方法です。
まずは何も省略していない形です。
list.stream() .forEach((Integer i) -> System.out.println("[" + i + "]"));
型を省略した記述方法です。
list.stream() .forEach((i) -> System.out.println("[" + i + "]"));
引数のカッコを省略したものです。
list.stream() .forEach(i -> System.out.println("[" + i + "]"));
3つ目の書き方をよくネットや本でみかけますね。
そしてこの引数の書き方ってどこかで見たことありませんか?そうですこの書き方はラムダ式で出てきたあのやり方です。
ラムダ式については過去に記事を書きましたので、よかったらコチラからどうぞ。
Streamで出来ること
今回紹介したのはループだけのメソッドですが、Streamは色々なメソッドを用意しています。
使い慣れてくると今までforループで処理していたことが少しバカらしくなるかもしれません。
どんなメソッドがあるかはjavadocで確認してみてください。
さいごに
実は過去にstreamのことを記事にしたことがありましたが、自分で読み返してみてもわかりにく記事だったので今回はリベンジということで書いてみました。(過去の記事はコチラです。)
前回の反省をふまえて、今回はコードが主役となるように余計な説明は極力省いてみました。
とにかく!streamはすごく便利な技なのでどしどし使ってみてください!
それでは!
この記事はお役に立てましたか?
お役に立てたことがあればシェアしていただけると嬉しいです!