2
A
回答
6
optionIterator find { case Some(x) if predicate(x) => true case _ => false }
至于无视例外...它是谓语,可以throw
?因为这不是很明智。尽管如此...
optionIterator find {
case Some(x) => Try(predicate(x)) getOrElse false
case _ => false
}
1
假设你可以用你的断言,这样的错误返回false:
iterator.flatMap(x => x).find(yourSafePredicate)
flatMap
需要集合的集合(其中Option
可迭代是作为Option
和Either
被认为是与一个的最大大小的集合),并将其转换成一个单一的集合:
scala> for { x <- 1 to 3; y <- 1 to x } yield x :: y :: Nil
res30: IndexedSeq[List[Int]] = Vector(List(1, 1), List(2, 1), List(2, 2), List(3, 1), List(3, 2), List(3, 3))
scala> res30.flatMap(x => x)
res31: IndexedSeq[Int] = Vector(1, 1, 2, 1, 2, 2, 3, 1, 3, 2, 3, 3)
find
返回的迭代,一个谓语为Option
或None
匹配的第一个条目;如果没有匹配:
scala> (1 to 10).find(_ > 3)
res0: Option[Int] = Some(4)
scala> (1 to 10).find(_ == 11)
res1: Option[Int] = None
3
添加的最佳地道一件大衣的油漆工作:
scala> val vs = (0 to 10) map { case 3 => None case i => Some(i) }
vs: scala.collection.immutable.IndexedSeq[Option[Int]] = Vector(Some(0), Some(1), Some(2), None, Some(4), Some(5), Some(6), Some(7), Some(8), Some(9), Some(10))
scala> def p(i: Int) = if (i % 2 == 0) i > 5 else ???
p: (i: Int)Boolean
scala> import util._
import util._
scala> val it = vs.iterator
it: Iterator[Option[Int]] = non-empty iterator
scala> it collectFirst { case Some(i) if Try(p(i)) getOrElse false => i }
res2: Option[Int] = Some(6)
获得过五第一偶数不炸掉测试。
1
一些样本数据
scala> val l = Seq(Some(1),None,Some(-7),Some(8))
l: Seq[Option[Int]] = List(Some(1), None, Some(-7), Some(8))
使用上的选项的序列flatMap会产生一个序列定义值,所有的无的都将被丢弃
scala> l.flatMap(a => a)
res0: Seq[Int] = List(1, -7, 8)
然后用发现 - 您将获得满足谓词的第一个值。请注意,发现的值被封装为选项,导致找到应该能够在“未找到”情况下返回有效值(无)值。
scala> l.flatMap(a => a).find(_ < 0)
res1: Option[Int] = Some(-7)
据我所知,这是“好”的方式为斯卡拉。
可能更习惯用法是使用收集/collectFirst在Seq ...
scala> l.collectFirst { case [email protected](x) if x < 0 => a }
res2: Option[Some[Int]] = Some(Some(-7))
注重的是,这里我们有一些(部分(-7)),因为collectFind应该有机会产生“未找到”的值,所以在这里第1部分 - 从collectFirst,第二部分 - 从Option的Seq的源元素。
你可以拉平一些(一些(-7))如果你需要在你的手中的价值。
scala> l.collectFirst({ case [email protected](x) if x < 0 => a }).flatten
res3: Option[Int] = Some(-7)
如果没有找到 - 你将拥有无
scala> l.collectFirst({ case [email protected](x) if x < -10 => a }).flatten
res9: Option[Int] = None
+0
问题是关于迭代器的。 –
相关问题
- 1. 转换斯卡拉ArrayBuffer到迭代器
- 2. 从选项斯卡拉
- 3. 如何迭代斯卡拉
- 4. 斯卡拉 - 迭代器被'消耗'
- 5. 斯卡拉并行无序迭代器
- 6. 斯卡拉迭代器图和
- 7. 斯卡拉,扩展迭代器
- 8. 斯卡拉 - 迭代器和takeWhile
- 9. 斯卡拉迭代器抽象方法
- 10. 斯卡拉地图从元组迭代
- 11. 斯卡拉 - 变换迭代到地图
- 12. 斯卡拉 - 选项
- 13. 找到斯卡拉
- 14. 斯卡拉方式/成语
- 15. 成语斯卡拉办法从列表
- 16. 斯卡拉排序选项
- 17. 斯卡拉,折叠选项
- 18. 斯卡拉的选项@BeanProperty
- 19. 斯卡拉:如何从一些收集
- 20. 斯卡拉更新值,而迭代
- 21. 斯卡拉密封特征的迭代?
- 22. 迭代和过滤斯卡拉地图
- 23. 斯卡拉 - 懒文件/ URL迭代
- 24. 定制mkString功能斯卡拉迭代
- 25. 斯卡拉与转发到下一个迭代值
- 26. 斯卡拉找到元组
- 27. 斯卡拉 - 方法优先
- 28. 斯卡拉宏:找到选项的封闭式
- 29. 斯卡拉 - 谓语
- 30. 查找斯卡拉
或'尝试(P(X))getOrElse返回FALSE。 –
是的,那样更好。我已经更新了答案以反映它。 –