lambdaについて調べてみた その1
【前提条件】
[参考資料]
徹底解説!Project Lambdaのすべて returns[Java8Launch]@bitter_foxさん
徹底解説!Project Lambdaのすべて リターンズ[祝Java8Launch #jjug]
【概要】
Java8で追加されたラムダを触り始めました。
しばらくは触ってわかった事を書いていこうと思います。
ラムダはマルチコアCPUを有効に使うために
並列処理を行うための機能です。
まずはラムダの書き方についてです。
今回は並列処理は行いません。
【サンプルコード】
import java.util.function.Consumer; import java.util.function.Function; public class Sample { public static void main(final String[] args) { final Runnable noArgLambda = () -> { System.out.println("No Arg Lambda"); }; final Consumer<String> argLambda = (String paramValue) -> { System.out.println(paramValue); }; final Function<String, String> lambdaFunc = (String paramValue) -> { return "<" + paramValue + ">"; }; noArgLambda.run(); argLambda.accept("test1"); argLambda.accept("test2"); System.out.println(lambdaFunc.apply("test3")); System.out.println(lambdaFunc.apply("test4")); } }
変数、noArgLambda、argLambda、lambdaFuncが
ラムダ式を使って定義したオブジェクトです。
書き方としては
(パラメータ型 パラメータ名) -> { 処理 };
です。
括弧は省略できるのですが、今回は省略せずに書いています。
【実行結果】
No Arg Lambda test1 test2 <test3> <test4>
【解説】
今まであったRunnableインターフェイスで新しいものではありません。
パラメータ、戻り値のなしのラムダ式を定義すると
Runnableインターフェイスのオブジェクトが作成されます。
final Runnable noArgLambda = () -> { System.out.println("No Arg Lambda"); }; ↓こういうイメージです final Runnable noArgLambda = new Runnable() { @Override public void run() { System.out.println("No Arg Lambda"); } };
パラメータ1つ、戻り値なしのラムダ式を定義すると
Consumerインターフェイスのオブジェクトが作成されます。
Consumer
final Consumer<String> argLambda = (String paramValue) -> { System.out.println(paramValue); }; ↓こういうイメージです final Consumer<String> argLambda = new Consumer<String>() { @Override public void accept(String paramValue) { System.out.println(paramValue); } };
パラメータ1つ、戻り値ありのラムダ式を定義すると
Functionインターフェイスのオブジェクトが作成されます。
Function
final Function<String, String> lambdaFunc = (String paramValue) -> { return "<" + paramValue + ">"; }; ↓こういうイメージです final Function<String, String> lambdaFunc = new Function<String, String>() { @Override public String apply(String paramValue) { return "<" + paramValue + ">"; } };