もっと Lambda その7
今日も Java8 がらみのネタです。
今回はちょっといつもと違って私が愛用している高機能な開発環境について少しだけ触れてみたいと思います。
日本でも人気赤丸急上昇中の NetBeans です。
今は Java8 を試すのに開発版を使っています。
注目の Lambda にも徐々にですが対応してます。
以前にも少し紹介したので今回は逆パターンを紹介します。
つまり、Lambda を使わない無名インナークラスを使用する標準的な(?)コードに変換するという試みです。
サンプルは前回のエントリーの JavaCury.java です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
package jp.yucchi.javacurry; import java.util.function.Function; import java.util.function.BiFunction; public class JavaCurry { public static void main(String[] args) { Function<String, Function<String, String>> house = java -> curry -> java + curry; System.out.println(house.apply("ジャワ").apply("カレー")); BiFunction<String, String, String> h = (java, curry) -> java + curry; System.out.println(h.apply("ジャワ", "カレー")); Function<String, Function<String, Function<String, String>>> house2 = java -> curry -> level -> java + curry + level; System.out.println(house2.apply("ジャワ").apply("カレー").apply("甘口")); Function<String,BiFunction<String, String, String>> h2 = java -> (curry, level) -> java +curry + level; System.out.println(h2.apply("ジャワ").apply("カレー","辛口")); } } |
では、実際にどのように変換されるのかスクリーンショットを撮ってみました。
10 行目の Lambda 式を変換してみます。
見事に変換されました。さすが NetBeans !
では、もう少し試してみましょう。
この Lambda 式は引数の型が省略されてます。
ちまたでは Lambda 式の型省略は企業によっては禁止されるんじゃないかと噂されてます。
それでか、どうかは解りませんが省略された型をコードに追加する機能もあります。
さっそく試してみましょう。
省略された型がちゃんと追加され表示されてますね。(^_^)
ついでに Lambda 式を複数行で書く場合を試してみます。
ちゃんと return 文もつくられてますね。
さすがです!
では、無名クラスを使うコードに変換してます。
全ての Lambda 式を無名クラスを使うコードに変換したプログラムはこのようになりました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
package jp.yucchi.javacurry; import java.util.function.Function; import java.util.function.BiFunction; public class JavaCurry { public static void main(String[] args) { Function<String, Function<String, String>> house = new Function<String, Function<String, String>>() { @Override public Function<String, String> apply(String java) { return new Function<String, String>() { @Override public String apply(String curry) { return java + curry; } }; } }; System.out.println(house.apply("ジャワ").apply("カレー")); BiFunction<String, String, String> h = new BiFunction<String, String, String>() { @Override public String apply(String java, String curry) { return java + curry; } }; System.out.println(h.apply("ジャワ", "カレー")); Function<String, Function<String, Function<String, String>>> house2 = new Function<String, Function<String, Function<String, String>>>() { @Override public Function<String, Function<String, String>> apply(String java) { return new Function<String, Function<String, String>>() { @Override public Function<String, String> apply(String curry) { return new Function<String, String>() { @Override public String apply(String level) { return java + curry + level; } }; } }; } }; System.out.println(house2.apply("ジャワ").apply("カレー").apply("甘口")); Function<String, BiFunction<String, String, String>> h2 = new Function<String, BiFunction<String, String, String>>() { @Override public BiFunction<String, String, String> apply(String java) { return new BiFunction<String, String, String>() { @Override public String apply(String curry, String level) { return java + curry + level; } }; } }; System.out.println(h2.apply("ジャワ").apply("カレー", "辛口")); } } |
これをみると Lambda 式ってけっこうイケてるかなって思います。
ちなみに Java8 と Java8 対応の NetBeans はまだ開発中なので動作が完全ではありません。
でも、開発版でグリグリやってると開発チームの熱い思いはしっかりと伝わってきます。
きっと Java8 対応の NetBeans もいつも通り素晴らしい出来でリリースされると確信してます。(^_^)
Trackback URL