Scala,如何遍历序列

时间:2015-07-21 00:06:04

标签: scala

我有一个Seq[Object],我希望遍历每个对象并检查其布尔属性之一是否为true / false。我尝试使用flatmap后跟filter,但它不起作用:

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

3 个答案:

答案 0 :(得分:0)

想象一下,你有以下几点:

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

你创建了这些人的名单:

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

现在,如果您想知道其中一个是否b设置为true,您只需执行以下操作:

x.exists(_.b)

答案 1 :(得分:0)

假设有如下对象

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

和这样的序列

val mySequence = Seq(obj1, obj2, obj3)

然后,您将使用以下逻辑过滤掉boolProp上的错误布尔条件

mySequence.filter(x => x.boolProp)

此操作返回一个只包含boolProp为true的对象的新序列。注意,这不是修改序列,而是返回一个新序列。

答案 2 :(得分: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
    }
  }

这是我的代码片段,我是scala的新手。我在这里遇到类型不匹配的错误...说预期是布尔值。孩子有可扩展预留的属性是真的那么只提取那个孩子从孩子的序列