私はscalaで次の問題を抱えています。OR の 2 つの条件を持つ述語関数を満たすすべてのリストの最初の要素を見つける必要があります。問題は、要素を取得したいだけでなく、2 つの条件のどちらが満たされているかを知りたいということです。以下に簡単な例を示します。
val l1 = List("A", "B", "AA", "BB")
val l2 = List("AA", "BB", "A", "B")
def c1(s: String) = s.startsWith("B")
def c2(s: String) = s.length == 2
println(l1.find(s => c1(s) || c2(s)))
println(l2.find(s => c1(s) || c2(s)))
結果は次のとおりです。
Some(B)
Some(AA)
l1 の場合、c1 が満たされた (l2 の場合は c2) ことを示す戻り値 (たとえば、文字列) が必要です。考えられる解決策は、テストの前に var を定義し、それを c1 および c2 関数内に設定することですが、より「機能的なスタイル」の解決策を見つけたいと思います。 )。
助けてくれてありがとう