どうも。@Tsuji_Taku50です。
もう少しするとチームでもJava8を使うことになりそうなので、Java8について少し調べました。
まぁ主にラムダ式なんですが。色んなサイトを見ても「Java8はラムダ式!」みたいなことが書いてありますが、ぶっちゃけよく分かっていません。
ラムダ式ってなんだよって感じなので、少しでも書き方や考え方を知ろうと思って今回調べました。
ラムダ式のメリット
- 記述が簡潔になる
色々なことが書かれていましたが、一番は記述が簡潔になることだと思われます。 - 例
Java7までの書き方↓ ラムダ式にすると・・・List list = Arrays.asList(1, 3, 2); Collections.sort(list, new Comparator() { @Override public int compare(Integer o1, Integer o2) { return Integer.compare(o1, o2); } });
List list = Arrays.asList(1, 3, 2); Collections.sort(list, (o1, o2) -> Integer.compare(o1, o2));
ラムダ式の構文
ラムダ式は、「引数部 -> 処理本体」という形式で表します。
メソッド名と戻り型の宣言が無いメソッド定義となるようです。
- 引数部分の書き方
引数部分の定義 | 詳細 | ラムダ式の例 |
---|---|---|
基本形(型1 引数名1) | 基本系の書き方はこれ | ()->{} (String s)->{} (int x,int y)->{} |
省略形(引数名1,引数名2) | 複数の引数がある場合は、全ての引数について型を省略する必要がある。一部だけの省略は不可能。 | ()->{} (s)->{} (x,y)->{} |
括弧の省略(引数名) | 引数が1個しか無い場合は、引数を囲む丸括弧を省略することが出来る。この場合は、型も省略する必要がある。 | s->{} |
*ラムダ式の引数名には単一アンダースコア「_」を使うことが出来ないみたいです。
- 処理本体の書き方
処理本体 | 詳細 | ラムダ式の例 |
---|---|---|
基本形 {文1; 文2; … return 戻り値;} |
基本系の書き方はこれ | (int x)->{sysout(x+1) return x} |
省略形(戻り値がvoid) | returnが省略可能 | (int x)->{sysout(x+1)} |
最後に
これからこのラムダ式の書き方が増えてくるかどうかは分かりません。
ただラムダ式の書き方を知っているに越したことはないかなと個人的には思っています。
書けるまでいかなくても、読めるようになっておいた方が良いかと思います。
おまけ(コード書いてみました)
public static void main(String[] args) {
// 基本形
Function f1 = (Integer i) -> {
return i + 1;
};
// 引数の型を省略
Function f2 = (i) -> {
return i + 1;
};
// returnを省略
Function f3 = (i) -> i + 1;
// () の省略(引数がひとつの場合)
Function f4 = i -> {
return i * i;
};
// 実行
f1.apply(1);
f2.apply(2);
f3.apply(3);
f4.apply(4);
}