Java SE 8 とラムダ式
(初稿:2014年6月)
Java SE 8から、新技法である「ラムダ式」表現が導入されました。このアップグレードは、おそらく、すべてのJavaプログラマにとって必須のものと言えるでしょう。
ラムダ式は「クロージャ(Closure)」とも呼ばれており、これは「関数型インターフェース」(1つのメソッドを持つインターフェース)のメソッドを実装する際に便利です。
基本的な文法は以下の通りです:
javaCopy code
(実装メソッドの引数) -> {処理}
例:
Button button = new Button();
button.addActionListener(
b -> System.out.println("ボタン押下をActionListenerで確認")
);
このようなラムダ式は、bashでの「パイプ処理」を効率化するのにも役立ちます。
find . -type f -name "*.html" -exec grep -l '1997-2014' {} \; | (while read f; do sed '/1997-2014/1997-2015/ g' $f > $f.bak; mv $f.bak $f; done)
この例では、カレントディレクトリ内のすべての.htmlファイルから1997-2014を抽出し、1997-2015に置換してファイルを保存します。このようなbashワンライナーを書けるかどうかは、プログラマの優秀さを示すポイントと言えます。
Javaでファイルを開いたりGREP処理したりするたびに、一からコードを書くのは混乱を招くことがあります。その代わりに、以下のような似たような例を使用できます。
String[] values = {"Z001", "XA001", "Y001", "ZX001","XYZ_SAEBA"};
List<String> list = Arrays.asList(values);
list.stream().filter(a -> a.startsWith("X")) // 「X」で始まるものをフィルタ
.forEach(a -> System.out.println(a)); // 出力
このコードは「X」で始まる要素をフィルタリングして出力します。
ラムダ技法を使えば、リレーショナルデータベースでの冗長性の管理も簡素化できます。新しい列を追加したり、テーブルを変更したりする場合、ラムダ技法を使えばコードのリファクタリングが簡単に行え、問題を解決できます。
Java 8のラムダ式は、プログラマにとって非常に有用な機能であり、ワンライナーでのコードを増やすことが期待されます。プログラマとしてのスキルを向上させるために、ラムダ式を積極的に活用してみることをお勧めします。
例えば、データベースで、以下
Table (Person):
Alpha - Numeric
Beta - Boolean
Gamma - VarChar
今までの技法だと、これらを処理する時に、一々引数を設定してやらなければならない。
ラムダ技法を使えば、
getAlpha
getBeta
getGamma
メソッドの実装をして、
doToMatchingPersons ( p -> p.getAlpha() < 20 && p.getBeta() == true && p.getGamma() == "XXX");
Like な事をすぐ書ける。そして、例えば、Table (Person)に、Delta 列が加わっても、
p.getDelta()
を実装すれば、
doToMatchingPersons
の再定義を必要とせずに、使用可能になる、と言う便利さがあります。
応用技で、私の自己紹介を英語で出力するサンプル:
Stream.of("My", "name", "is", "Kita", "San", ".").forEach(s -> System.out.print(s + " "));
List list = Arrays.asList("My", "name", "is", "Kita", "San", ".");
list.stream().forEach(s -> System.out.print(s + " "));
(上の二つは同じ)