「Java」ラムダ式のサンプル(備忘録)
久しぶりの更新。
避けに避け続けたラムダ式。とうとうお仕事で読む、書く必要に迫られたのでお勉強。
といっても今回は備忘録的にサンプルコードを。
ラムダだ式はざっくり言うと「メソッド一つしかないインタフェースの実装をより簡単に書けるようにしましょう(以前の匿名クラスのシンタックスはわかりにくいから)」という感じのもののようで(思想的な部分の理解は後回し)。
※ 英語は苦手ですが、このあたりを読まないといかん感じですね。
Lambda Expressions (The Java™ Tutorials > Learning the Java Language > Classes and Objects)
サンプルは以下の感じ。
package com.example.lambda; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.List; public class Example { public static void main(String[] args) { // Example1 Runnable r1 = new Runnable() { @Override public void run() { System.out.println(Thread.currentThread().getName()); } }; new Thread(r1).start(); //Runnable r = () -> {System.out.println(Thread.currentThread().getName());}; Runnable r = () -> System.out.println(Thread.currentThread().getName()); new Thread(r).start(); // Example2 List<Integer> list1 = Arrays.asList(1, 9, 4, -3); Comparator<Integer> c1 = new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { return o1 - o2; } }; Collections.sort(list1, c1); System.out.println(list1); List<Integer> list2 = Arrays.asList(1, 9, 4, -3); // Collections.sort(list2, (o1, o2) -> {return o1 - o2;}); Collections.sort(list2, (o1, o2) -> o1 - o2); System.out.println(list2); // Example3 Test t1 = new Test() { @Override public String test(int i, int j) { return Integer.toString(i) + Integer.toString(j); } }; System.out.println(t1.test(1, 2)); Test t2 = (i, j) -> {return Integer.toString(i) + Integer.toString(j);}; System.out.println(t2.test(1, 2)); } interface Test { public String test(int i, int j); } }
ラムダ式未使用の場合と使用した場合で対比させて書いてます。
Example1、Example2はいろんなWebページで詳しく書かれれておりましてすで~に書き古されたものですが、Runnnable、Comparatorをラムダ式使って書いたサンプルです。
Example3はTestという独自インタフェースを定義して、そいつでラムダ式使ってます。特に特別なことはしてないですが。
より簡素に書けるように「引数の型を省略できる」、「{}や return はある条件のもと省略できる」など、いろいろな省略系が用意されているみたいです。が、それはおいおい身に着けていくつもりです。
今日のところは以上です。