2017-11-25 16 views
1

ラムダ(コード塊)を渡して、必要なときに実行するだけです。私は以下のコードでメソッドexecuteLambda(...)を実装するにはどうすればよい(同様にメソッドのシグネチャものです):単一のパラメータでJava 8ラムダを渡す方法

public static void main(String[] args) 
{ 
    String value = "Hello World"; 
    executeLambda(value -> print(value)); 
} 

public static void print(String value) 
{ 
    System.out.println(value); 
} 

public static void executeLambda(lambda) 
{ 
    someCode(); 
    lamda.executeLambdaCode(); 
    someMoreCode(); 
} 
+0

'executeLambdaCode()'メソッドで 'Functional Interface'を宣言します – Jerry06

答えて

5

あなたのラムダは、一つのパラメータがかかりますが、あなただけのexecuteLambdaにラムダ、ない値を渡します。あなたは、ラムダは、ロ​​ーカル変数をキャプチャしたい場合は、パラメータを取って、それを書いていないが、あなたが本当にそれは一つのパラメータを取りたいならば、あなたはこのようにそれを記述します。あなたはそれをしたい場合は

import java.util.function.Consumer; 

public static void main(String[] args) { 
    String message = "Hello World"; 
    executeLambda(message, value -> print(value)); 
} 

public static void executeLambda(String value, Consumer<String> lambda) { 
    lambda.accept(value); 
} 

valueをキャプチャするには、Runnableを使用し、ラムダを() -> print(value)と書いて、runnable.run()と呼んでください。

1

合理的なパラメータの型を提供することにより。ラムダを取る方法はラムダについて知りません。

代わりに、Callableオブジェクトを渡すことができます。そして、あなたのメソッドはそのオブジェクトに対してcall()メソッドを呼び出さなければなりません!代わりに、RunnableまたはConsumer of Stringを使用することもできます(Callableは値を返すことになっており、呼び出すメソッドは無効です)。

+0

戻り値を期待しないので、' Callable'はここでは最善の選択ではありません。 'Consumer 'は良い選択です。 –

+1

私はラムダをしばらく使用していて、実際に自分自身を渡して、その本を読んだことがあります。私がしている課題は、あなた自身の使い方があまり明確ではなく、ラムダの事例や情報のほとんどすべてが、それらをパラメータとして使用する方法です。たとえば、ストリームをフィルタリングするためにラムダを渡す方法などです。どちらの方法でも、一般的に答えに否定的なコメントで答えるのは良い形式ではありません。 –

+1

あなたは正しいです。私はすでにその部分を落とした。 – GhostCat

2
public static void main(String[] args) 
{ 
    String value = "Hello World"; 
    executeLambda(() -> print(value)); 
} 

public static void print(String value) 
{ 
    System.out.println(value); 
} 

public static void executeLambda(Runnable runnable) 
{ 
    runnable.run(); 
} 
関連する問題