我有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) && 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 tuple (v1,v2,v3,v4)
?或类似的东西。我不想这样做4次。我有一个巨大的序列,这没有优化
答案 0 :(得分:3)
你可以使用这样的折叠..
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
)
}