はじめての Lambda vol.5

Lambda のことをいろいろ軽く調べてきました。

Swing を使った GUI アプリでも Lambda は重宝されそうですね。

それでは Lambda を使った簡単な Swing アプリを作ってみました。

jp\yucchi\Swing_Lambda_1.java
package jp.yucchi;

import javax.swing.JOptionPane;

public class Swing_Lambda_1 extends javax.swing.JFrame {

    public Swing_Lambda_1() {
        initComponents();
    }

    @SuppressWarnings("unchecked")
    private void initComponents() {

        jButton1 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jButton1.setText("押してみて!");
                
        jButton1.addActionListener(e -> {
            JOptionPane.showMessageDialog(null, "こんにちわ~ (^_^)v");
        });
        getContentPane().add(jButton1, java.awt.BorderLayout.CENTER);

        pack();
                
                setLocationRelativeTo(null);
    }

    public static void main(String args[]) {
        
        java.awt.EventQueue.invokeLater(() -> {
            new Swing_Lambda_1().setVisible(true);
        });
        
    }

    private javax.swing.JButton jButton1;

}

これまでのコードと違う部分が2カ所ありますね。

Lambda を使うと無名クラスの生成記述を省略できてしまうんですね~(^_-)-☆

それでは本当にこれで動くのか確認してみます。

おおっ!動いてますね(^_^)v

Lambda を使った難しいことは解りませんがこんな簡単で便利なことは好きです!

少しずつ Lambda に慣れて JDK 8 を楽しめるようになれるといいなと思う今日この頃です。

Hatena タグ:

はじめての Lambda vol.4

はじめての Lambda シリーズも4回目となりました。

今回は Method Reference を使ってみることにします。

Method Reference って名前のとおりメソッド参照です。

メソッドに対する参照だけです。

よって、はじめての Lambda vol.2 でのサンプルコードの最大値を求める部分を

Method Reference に置き換えることができます。

下記コードのように非常に簡潔になります。(^_^)v

jp\yucchi\hello_lambda_2\Hello_Lambda_2.java
package jp.yucchi.hello_lambda_2;

import java.util.ArrayList;
import java.util.List;

public class Hello_Lambda_2 {

    public static void main(String[] args) {
        List ladies = new ArrayList<>();
        ladies.add(new Lady(80, 20));
        ladies.add(new Lady(70, 14));
        ladies.add(new Lady(85, 30));
        ladies.add(new Lady(90, 24));
        ladies.add(new Lady(100, 10));
        int maxBust = ladies.filter(l -> l.age > 15 && l.age < 26)
                .map(l -> l.bustSize)
                //.reduce(0, (left, right) -> Math.max(left, right));
                // Method Reference を使うように変更
                .reduce(0, Math::max);
        System.out.println("16歳以上、26歳未満で一番大きな胸のサイズは" + maxBust + "です。");
    }

    private static class Lady {

        int bustSize;
        int age;

        public Lady(int bustSize, int age) {
            this.bustSize = bustSize;
            this.age = age;
        }
    }
}

Math::max の部分が Method Reference を利用したコードです。

こんなにすっきりしたコードで本当にちゃんと動くのか?

試してみました。

Method Reference

 

おおっ! ちゃんと動いてるじゃないか!

一時期、Method Reference に :: と # どちらを使うかで熱い議論がなされていた。(今も?)

Java™ Platform, Standard Edition 8 Developer Preview with Lambda Support b 39 では

:: (ダブルコロン)が採用されているようです。

Java 8 で Lambda が実装されたら馴染みのない素敵なコードを見ることができるような気がします。

Hatena タグ: