見出し画像

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 + " "));

(上の二つは同じ)


よろしければサポートお願いします! いただいたサポートはクリエイターとしての活動費に使わせていただきます!