誰かがメソッド参照を使用するために次のコードを変換するのを助けることができますか?私はこの新しい構文のまわりで私の頭をラップしようとしているが、それは、単一のメソッド呼び出しにマップされたばかりの単一の変数よりも複雑なったとき、私はすぐに迷子:ラムダをメソッド参照に変換する
getWorkspaces().stream().forEach((ws) -> {
DataStoreInfo defaultDataStore = getDefaultDataStore(ws);
if (defaultDataStore != null) {
other.setDefaultDataStore(ws, defaultDataStore);
}
});
「私はこれで始めたが、それはdoesnのトン作業:)
getWorkspaces().stream()
.map(this::getDefaultDataStore)
.filter(Objects::nonNull)
.map(other::setDefaultDataStore);
編集:「それは動作しません」と、私はIDEはそれがメソッドを解決できないことを「setDefaultDataStore」の下の最後の行に文句を意味します。私は働くものから始めることができればいいが、そこに行く方法は分からない。メソッド参照を使用して2つのパラメータを取得するメソッドを呼び出す方法と、それがどのようにマップされるかについて、私は非常に混乱しています。これに
getMaps().stream().forEach((m) -> {
other.add(m);
});
:私はこのようになりますいくつかのコードを変換しました
getMaps().forEach(other::add);
しかし、それはより複雑になったとき、私は迷子になります。私はメソッド参照で同じコードを書く方法の明白な解決策があることを望んでいました。
「動作しない」とはどういう意味ですか?より具体的に、理想的には[mcve]を提供してください。 –
@GhostCat:私は持っていませんが、それはそれ以上の詳細なしでは "それは動作しません"それは理想的な質問から遠くになります。 –
"メソッド参照を使用する"ことを試みる前に、それを使わないで動作するものを書く必要があります...2番目のスニペットはラムダ式でも機能せず、メソッド参照の使用には関係しません。まず、 'setDefaultDataStore'に2つのパラメータが必要です。だからあなたはそれらを保管する必要があります。 – Tunaki