【问题标题】:safe Iterator.max安全迭代器.max
【发布时间】:2023-03-14 13:34:01
【问题描述】:

是否有一个库提供像 Iterator.max 这样的函数,但它返回一个 Option[A] 而不是 A 来解释可能为空的迭代器?或者,是否有一个库提供PosInf[A] 或与A 相邻的正无穷大类?

(显然,这些都只是我自己的繁重工作,但使用库几乎总是比复制代码更可取。)

【问题讨论】:

    标签: scala iterator


    【解决方案1】:

    scalazMA.maximum。用法:

    import scalaz._; import Scalaz._
    
    List(1, 2, 3).maximum == Some(3)
    
    List.empty[Int].maximum == None
    

    唯一的问题是这不能直接与迭代器一起使用,因此您必须改用Stream(例如使用Iterator.toStream

    List(1, 2, 3).iterator.toStream.maximum = Some(3)
    

    【讨论】:

      【解决方案2】:

      我什么都不知道,但这很简单:

      def maxOpt[T: Numeric](i: Iterator[T]) = if (i.hasNext) Some(i.max) else None
      

      编辑:数字要求太高,排序就足够了:

      def maxOpt[T: Ordering](i: Iterator[T]) = if (i.hasNext) Some(i.max) else None
      

      如果你使用isEmpty 应该适用于TraversableOnce 的任何子类

      【讨论】:

        猜你喜欢
        • 2011-06-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-20
        • 1970-01-01
        • 2015-04-27
        相关资源
        最近更新 更多