すべての値が定義されているかどうかをチェックするためにforallを使用し、定義されている場合はfoldを得るためにfoldを適用します。
scala> val ls = List(Some(2), Some(5), Some(4), Some(1))
ls: List[Some[Int]] = List(Some(2), Some(5), Some(4), Some(1))
scala> if(ls.forall(_.isDefined)) Some(ls.flatten.foldLeft(0){_ + _ }) else None
res22: Option[Int] = Some(12)
scala> val ls = List(Some(2), None,Some(5), Some(4), Some(1),None)
ls: List[Option[Int]] = List(Some(2), None, Some(5), Some(4), Some(1), None)
scala> if(ls.forall(_.isDefined)) Some(ls.flatten.foldLeft(0){_ + _ }) else None
res23: Option[Int] = None
scala>
ねえ、私はそれが大好き、プラス1つ。私はそれを少し試してみると、私もそれを理解することができます参照してください、あなたは私のバージョンを折り畳み権利と言ったのですか? –
@DamianLatteneroはい。 2つの答えは同等です。 –
ええ、私はフラットマップとマップを持つバリアントが好きです、面白いです –