2015-07-21 49 views
-4

我有一個Seq[Object],我想遍歷每個對象,並檢查其布爾屬性之一是否是真/假。我試着使用flatmap其次是filter,但它不工作:斯卡拉,如何遍歷序列

val systemResourcesExpandable = host.systemResources flatMap (.child) filter { childseq => 
    for { 
     child <- childseq; 
     child.config flatMap (.cpuAllocation) flatMap (_.expandableReservation) 
    } yield { child } 
} 
+3

你能發佈你的代碼片段,並解釋什麼是不工作? – Ren

回答

0

假設像下面

case class MyObject(intProp: Int, boolProp: Boolean) 

和這樣

val mySequence = Seq(obj1, obj2, obj3) 

然後將使用下面的邏輯來濾除boolProp

mySequence.filter(x => x.boolProp) 
假布爾條件的序列的對象

該操作返回一個新的序列,只有對象具有true的boolProp。請注意,這不是修改該序列,而是返回一個新的。

+0

嗨...我添加了代碼片段..請看看你 – Priya

0

想象一下,你有以下幾種:

case class Stuff(p: Int, b: Boolean = false) 

與您共創這些人的名單:

val x = List(Stuff(1), Stuff(2), Stuff(3, true)) 

現在,如果您想了解其中一個是否已將b設置爲true,那麼您只需執行以下操作:

x.exists(_.b) 
+0

請看我的代碼片段 – Priya

+0

謝謝你的解釋! – Priya

0
val systemResourcesExpandable : Option[Seq[SystemResources.Child]] = host.systemResources flatMap (_.child) filter { childseq => 
    for{ 
     child <- childseq; 
     expandablereservation <-child.config flatMap (_.cpuAllocation) flatMap (_.expandableReservation) 
     if (expandablereservation) 

    } yield { 
     child 
    } 
    } 

這是我的代碼片段,我是新來斯卡拉..我我得到了這裏類型不匹配一個錯誤...說,預計是布爾..孩子已經擴展預留的屬性是true,則只從孩子的序列中提取那個孩子

+0

@恩請你看看這個,並幫助 – Priya

+0

不要發佈新的問題作爲答案。請更新您的原始問題。 –