gpt4 book ai didi

scala - 如何从 scala Iterator[T] 转换为 Option[T]

转载 作者:行者123 更新时间:2023-12-01 07:02:21 26 4
gpt4 key购买 nike

我试图将应该返回单个项目的迭代器转换为等效选项。

我能做的最好的就是这个。我应该使用标准 API 中的东西吗?

def toUniqueOption[T](a: Iterator[T]): Option[T] =
if (a.size > 1)
throw new RuntimeException("The iterator should be emtpy or contain a single item but contained ${a.size} items.")
else if (a.size > 0)
Option(a.toList(0))
else
Option.empty

更新尝试
def toUnique[T](a: Iterator[T]): Try[Option[T]] =
if (a.size > 1)
Failure(new RuntimeException("The iterator should be emtpy or contain a single item but contained ${a.size} items."))
else if (a.size > 0)
Success(Option(a.toList(0)))
else
Success(Option.empty)

最佳答案

调用 size 是有风险的,因为它不能保证有效甚至停止。

怎么样:

def toUniqueOption[T](a: Iterator[T]): Option[T] =
a.take(2).toList match {
case Nil => None
case x :: Nil => Some(x)
case _ => throw new RuntimeException("Iterator size > 1")
}

关于scala - 如何从 scala Iterator[T] 转换为 Option[T],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21960079/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com