[原创] 在List中找出前3个小于5的数

xussen 2013-06-08
定义一个List数组
val a = List(2,2,4,3,1,6,7,8,4,0)
如何用scala原生的函数找出前三个小于5的数List(2,2,4),不用再遍历之后的数

集合里有个def filter(p: A => Boolean),但是要全部遍历
是否有类似def filter(p: A => Boolean, max: Int)这样的函数
leebeen34 2013-06-09
int size=a.size();
int k=0;
for (int i=0;i<size;i++){
  if(k>3){
    break;
  }
  if(a.get(i)<5){
    k=k+1;
  }
}
厌倦发呆 2013-06-10
你可以用 list.withFilter(_ < 5).take(3)
其中withFilter是non-strict的过滤,也就是只在懒过滤,应该符合你的要求
xussen 2013-06-10
厌倦发呆 写道
你可以用 list.withFilter(_ < 5).take(3)
其中withFilter是non-strict的过滤,也就是只在懒过滤,应该符合你的要求

withFilter的返回值是FilterMonadic,只支持map,flatMap,foreach,withFilter四个方法。。。
厌倦发呆 2013-06-11
额,最近没怎么用这个api,抱歉搞错了哈。
应该是 list.view.filter(_ < 5).take(3)
xussen 2013-06-11
厌倦发呆 写道
额,最近没怎么用这个api,抱歉搞错了哈。
应该是 list.view.filter(_ < 5).take(3)

非常感谢,这样写就清爽多了。
话说non-strict这个词第一次听说,withFilter和view都是non-strict(非严格的?),和lazy 的关系是什么?lazy属于non-strict的一种实现方式吗?scala里面还有哪些接口是属于non-strict(除lazy)?
我想起这两天看javascript书的时候,里面有个use strict指令,作用是表示后续代码将会解析为严格代码(strict code),比如禁止使用with、变量必须先声明等等的。是否跟这个概念差不多?
厌倦发呆 2013-06-12
这里可以简单的认为non-strict就是lazy好啦
javascript的use strict意思不同,javascript的是说采用严格语法。
Global site tag (gtag.js) - Google Analytics