Scala筛选器和多谓词报告
我有4个谓词Scala筛选器和多谓词报告,scala,scala-collections,Scala,Scala Collections,我有4个谓词 private def pred1(ep:MyClass):Boolean = ep.attr1.contains(true) && func1(ep) private def pred2(ep:MyClass):Boolean = ep.attr1.contains(true) && !func1(ep) private def pred3(ep:MyClass):Boolean = ep.attr1.contains(false) &
private def pred1(ep:MyClass):Boolean = ep.attr1.contains(true) && func1(ep)
private def pred2(ep:MyClass):Boolean = ep.attr1.contains(true) && !func1(ep)
private def pred3(ep:MyClass):Boolean = ep.attr1.contains(false) && func2(ep)
private def pred4(ep:MyClass):Boolean = ep.attr1.contains(false) && !func2(ep)
然后我有一个列表,我想按每个谓词过滤,如下所示
val ep: Seq[MyClass] = ???
val v1 = es.filter(pred1)
val v2 = es.filter(pred2)
val v3 = es.filter(pred3)
val v4 = es.filter(pred4)
如何在单个筛选器中使用正确的谓词获取
v1、v2、v3、v4的值,并将其报告为4元组(v1、v2、v3、v4)
?或者类似的东西。我不想这样做4次。我有一个巨大的序列,这是没有优化的你可以使用这样的折叠
ep.foldLeft[(Seq[MyClass], Seq[MyClass], Seq[MyClass], Seq[MyClass])]
((Nil,Nil,Nil,Nil)) { case ((a,b,c,d), i) =>
(
if (pred1(i)) a :+ i else a,
if (pred2(i)) b :+ i else b,
if (pred3(i)) c :+ i else c,
if (pred4(i)) d :+ i else d
)
}
谢谢,这看起来很有帮助。我将测试它,我相信它会工作。我试图调用map,我想我会遇到的问题是,它不会在我尝试过的情况下放置任何对象或()。我认为这是不可能做到这一点的地图。下面是我尝试过的val result=es.map{x=>val v1=if(pred1(x))Some(x)else None val v2=if(pred2(x))Some(x)else None val v3=if(pred3(x))Some(x)else None val v4=if(pred4(x))Some(x)else None}