【发布时间】:2019-12-17 13:43:26
【问题描述】:
我是 Scala 新手,我创建了一个无限 Stream 或 int,并希望为每个 int i 创建一个 map(),计算值 x,这是由方法 m(i) = x 产生的。关键是,我希望流在x > 0 时真正停止,并且我需要用于计算列表中最高x 的i。但是我正在努力完成这项任务,因为我收到了UnsupportedOperationException empty.max...
我尝试使用下面的代码,抛出所描述的异常。我还尝试从(i,m(i)) 创建元组,但实际上并没有应用m(i),而是方法本身被映射了。
这是方法m:
def m(t: Int): Double = {
//Some calculation...
}
Ant 我尝试了这些选项:
Stream.from(1).map(m(_)).takeWhile(_ > 0).toList.max
Stream.from(1).map((_,m(_))).takeWhile(_._2.apply(1) > 0).maxBy(_._2)
第二个显示:
missing parameter type for expanded function ((x$2: <error>) => m(x$2)) Stream.from(1).map((_,m(_))).takeWhile(_._2.apply(1) > 0).maxBy(_._2)
我怎样才能尽可能短地解决这个问题?非常感谢你们!
【问题讨论】:
-
试试
Stream.from(1).map(i => i -> m(i)).takeWhile(_._2 > 0).maxBy(_._2)._._1如果你得到一个 UnsupportedOperationException empty.max 是因为你的流是空的,这意味着没有一个元素满足takeWhile谓词,请确保你的逻辑是正确的。 -
非常感谢@LuisMiguelMejíaSuárez,您的解决方案是正确的。但是我无法将评论标记为已接受的答案,对此感到抱歉
标签: scala functional-programming stream