「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 はある条件のもと省略できる」など、いろいろな省略系が用意されているみたいです。が、それはおいおい身に着けていくつもりです。

今日のところは以上です。