2017-10-30 12 views
2

を使用する関数では、Javaのlambdasで非常に新しいです。2つのパラメータを渡すラムダ

私は 彼らは非常に興味深い見られるように、私はそれを使用して開始しているが、私はまだ私がのUUIDのリストを持っており、それぞれのUUIDのために私が取る関数を呼び出したいそれらを完全に

を使用する方法がわかりません二つのパラメータ:最初の私は、次のコードを書かれているが、そのは

uuids.stream() 
    .map(uuid -> {"string",uuid}) 
    .forEach(AService::Amethod); 
が動作していない私は、それぞれのuuid

のための定数文字列を渡していた文字列であり、第二は、UUID

です

これは、ラムダ式は、単一の戻り値を持っているので、{"string",uuid}が動作しない別のクラスAService

public void Amethod(String a, UUID b) { 
    System.out.println(a+b.toString()); 
} 
+1

可能な重複になります[Javaのラムダは、1つの以上のパラメータを持つことができますか?](https://stackoverflow.com/questions/27872387/can-a-java-lambda-have- 1より大きいパラメータ) –

答えて

3

である方法です。

.map(uuid -> new Object[]{"string",uuid})を使用して配列を返すことはできますが、それはAService::Amethodメソッドリファレンスでは受け入れられません。 aserviceはあなたがAmethodメソッドを実行したいにAServiceクラスのインスタンスである

uuids.stream() 
    .forEach(uuid -> aservice.Amethod("string",uuid)); 

:あなたの例では

あなたはmapステップをスキップすることができます。

1
uuids.stream().forEach(uuid -> AService.Amethod("string", uuid)); 

あなたはPairクラスを与え、あなたの現在のコードに近い何かを書くことができますが、1)あなたは、より複雑なコードで終わります。 2)Java標準ライブラリには1つの組み込み関数がありません。 2)のために、1つを定義するかなりの数のユーティリティライブラリがあります。例えば。 https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/tuple/Pair.htmlと、それはの

uuids.stream() 
     .map(uuid -> Pair.of("string",uuid)) 
     .forEach(pair -> AService.Amethod(pair.getLeft(), pair.getRight())); 
関連する問題