scalac 学习笔记(二) :提取器 和 偏函数

偏函数: 应用到序列的每一个元素上, 最后返回一个新的序列  - 偏函数做了 filter  map 要做的事情。

案例一:过滤一个数组内 小于25并大于3 的姓名;
定义数组 val wordFrequencies = ("habitual", 6) :: ("and", 56) :: ("consuetudinary", 2) ::
  ("additionally", 27) :: ("homely", 5) :: ("society", 13) 
java8的 函数式写法 (内置了一个对象)
list.stream().filter(o->o.getSize()<25 && o.getSize()>3).map(A::getName).collect(Collectors.toList());

scalac 写法一:

wordFrequencies.filter(wf => wf._2 > 3 && wf._2 < 25).map(_._1)

写法上和java8几乎一致(不一样的地方在创建数组上以及scala用了通配符匹配元素)

优化写法一:模式匹配形式的匿名函数(比上面参数构造看着清晰了一些)

 wordFrequencies.filter { case (_, f) => f > 3 && f < 25 } map { case (w, _) => w }

偏函数写法

val pf: PartialFunction[(String, Int), String] = {
  case (word, freq) if freq > 3 && freq < 25 => word
}
wordFrequencies.collect(pf) // List("habitual", "homely", "society")
关键的写法是 collecet的定义,A,B分别是list对象里的key,value 
def collect[B](pf: PartialFunction[A, B]): Seq[B]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值