NetBeansでJava8を試してみる その2
フィルター
帰宅が遅かった&酔っぱらいなので今日はフィルターをちょこっと試す。
というわけで、まずは昨日の処理にフィルターを追加してみた。
@Test public void フィルター() { List<String> list = new ArrayList<>(); list.add("A"); list.add("B"); list.add("C"); list.stream().filter(new Predicate<String>() { @Override public boolean test(String t) { return "B".equals(t); } }).forEach(s -> { System.out.println(s); }); }
Bの時だけ標準出力に文字列を出します。
これだけでも動くのですが、NetBeansは「この匿名内部クラスをlambdaに変換出来ます。」とご親切に教えてくれます。
自動で変換してもらうとこんな感じになります。
@Test public void フィルター変換後() { List<String> list = new ArrayList<>(); list.add("A"); list.add("B"); list.add("C"); list.stream().filter((String t) -> "B".equals(t)).forEach(s -> { System.out.println(s); }); }
これだけでもいいのですが、昨日の内容を踏まえると(String t)をtに変換できます。
最終的にフィルターはこんなかんじになりました。
最初の処理に比べると、非常にシンプルになったと思います。
@Test public void フィルター最終形() { List<String> list = new ArrayList<>(); list.add("A"); list.add("B"); list.add("C"); list.stream().filter(t -> "B".equals(t)).forEach(s -> { System.out.println(s); }); }
補足というかおまけというか
tやsのところは、->の左右で一致していれば問題ないです。
なのでこんなソースでもコンパイルエラーになりません!
@Test public void かっこいいlambda() { List<String> list = new ArrayList<>(); list.add("イオ"); list.add("イオラ"); list.add("イオナズン"); list.stream().filter(僕の使える最強の魔法 -> "イオナズン".equals(僕の使える最強の魔法)).forEach(のヮの -> { System.out.println(のヮの); }); }
次はstreamのAPIを色々見ていこうと思います。