2013-10-10 65 views
2

鑑於List,我想過濾掉任何等於Unit -()的元素。來自列表的過濾器單元

有沒有比這個代碼更好的過濾方法?

scala> List(()).filter(x => x !=()) 
<console>:8: warning: comparing values of types Unit and Unit using `!=' will 
always yield false 
        List(()).filter(x => x !=()) 
              ^
    res10: List[Unit] = List() 
+0

我都喜歡的答案。我如何決定? –

+1

它說它總會產生錯誤的原因是因爲'Unit'是單身類型。你需要從列表中過濾單元值的實際用例是什麼?你是否出於某種原因使用了「List [Any]」? – DaoWen

+0

@DaoWen,使用for表達式,我遍歷List [JsObject]'。對於每個元素,我想創建一個表示鍵值的元組(String,String)。但是,如果密鑰是「無效的」,那麼我在表達式中返回「無」。但是,關於我的問題(除了問題),我使用了一個'list.flatMap(x => x match {case Some(x)=> List(x); case _ => None})'然後全部在我的輸出列表中,'None'將被忽略(也許這是錯誤的術語?) –

回答

3

我會去這個:

List(1,(), 4,(), 9,(), 16) filter (_ !=()) 
res0: List[AnyVal] = List(1, 4, 9, 16) 
+0

儘管其他答案對我來說看起來不錯,但這個答案看起來*可以說是最簡潔的。 –

3

你可以使用模式匹配:

list.filter(_ match { 
    case x : Unit => false 
    case x => true}) 
3
scala> List(()).filterNot(_.isInstanceOf[Unit]) 
res0: List[Unit] = List() 

scala> List((),1,2).filterNot(_.isInstanceOf[Unit]) 
res1: List[AnyVal] = List(1, 2)