创建一个修改过的`filter`函数

时间:2015-09-16 07:08:22

标签: scala

考虑filter function

如果可能的话,我对过滤功能的以下修改感兴趣:

  • 我们知道我们可以做的收藏:
 case class People(val age: Int) 
 val a: List[People] = ...
 a.filter(i => i.age ==10 )

或更简单:

a.filter(_.age==10 )

我可以用任何简单的方法定义另一个修改后的过滤器,其工作方式如下(无下划线)

a.myfilter1( age==10 )
  • filter函数的参数不是布尔值时,它不起作用。假设我想创建一个修改过的过滤器,当给出非布尔值时,它会自动转换为相等。这是一个例子:
val anotherPerson: People = ... 
a.myFilter2(anotherPerson)

我希望上面的myFilter2翻译成以下内容:

a.filter(_.equals(anotherPerson))

1 个答案:

答案 0 :(得分:1)

使用隐式def:

case class MyFilterable[T](seq: Seq[T]) {
    def suchAFilter(v: Any): Seq[T] = {
      seq.filter(v.equals)
    }   
}

implicit def strongFilter[T](seq: Seq[T]): MyFilterable[T] = {
    MyFilterable(seq)
}


println(List(1,2,3).suchAFilter(2))