2016-09-30 21 views
-4

誰もがJava 8でラムダ式の使用を伝えることはできますか?私は以下のコードを試してみましたが、プログラムの意味を得ることができませんでしたJava 8でのラムダ式の使い方とは何ですか?

は:

public static void main(String[] args) { 
    state s = new state(); 
    MathOperation addition = (a, b) -> a + b; 
    System.out.println(s.operate(10.1, 5.2, addition)); 
} 

interface MathOperation { 
    double operation(double a, double b); 
} 

private static double operate(double a, double b, MathOperation mo) { 
    return mo.operation(a, b); 
} 
+0

"誰でもjava8でラムダ式の使用を教えてもらえますか?"私はこのクエストインをあまりにも広範囲に指定しました。あなたはこの主題に関する本の全体を読むことができます。 –

+1

これできちんとしたドキュメンテーションセクションがあります。 Java 8のlambdasの説明については、http://stackoverflow.com/documentation/java/91/lambda-expressionsを読んでください。 – walen

+0

本またはオラクルのドキュメントを参照してください。質問が広すぎる! –

答えて

0

プログラムは、両方のパラメータの合計を計算します。 あなたの場合10.1 + 5.2

BTW:Java命名規則を読んでください。 implements MathOperationこと

MathOperation addition = (a, b) -> a+b; 

新しい匿名クラスのオブジェクトにadditionを割り当てます。クラス名は基本的に、この文は大文字

0

で始めるべきです。このクラスはoperationメソッドを実装しています。実装はその2つの引数を追加します。

class SomeAnonymousClass implements MathOperation { 
    @Override 
    public double operation(double a, double b) { 
     return a + b; 
    } 
} 

ような何かoperation方法は、(あなたの例ではmo.operationように)このクラスのオブジェクトで使用されているときに、それは引数の合計を返します。

1

ラムダ式は、実装するメソッドが1つしかないインターフェイスのインスタンスが必要な場合に使用できます。この場合、

MathOperation addition = ... 

...部分はMathOperationと互換性のある値を期待します。しかし、私たちは怠惰ですよね?

class Addition implements MathOperation { 
    public double operation(double a, double b) { 
     return a + b; 
    } 
} 

// usage: 
MathOperation addition = new Addition(); 

これはあまりにも長いですよ!私たちは、このような単純なもののためだけにクラスを作成したくありません。その後

は匿名クラスを来たが、彼らは同様にちょっと冗長です:

MathOperation addition = new MathOperation() { 
    public double operation(double a, double b) { 
     return a + b; 
    } 
} 

あなたはラムダ式を使用する場合は、あなたのコードは非常にクリーンになります。

MathOperation addition = (a, b) -> a + b; 

(a, b)部分は、パラメータのを指定します名前。 ->の右側は、インターフェイスメソッドの実際の実装です。式の場合は、returnキーワードが暗黙的に追加されます。いいね!

「1秒待ってください!パラメータの種類はどこですか?」あなたは尋ねました。さて、インタフェースからすべてが推測できるので、型を明示的に指定する必要はありません!

MathOperationの実装を格納するadditionという変数があります。実装は単にreturn a + bです。

ここでは、残りのコードを自分で理解できると思います。

関連する問題