2014-10-28 106 views
1

我有以下列表结构 -如何使用scala对列表中的元素进行计数?

"disks" : [ 
    { 
     "name" : "A", 
     "memberNo" :1 
    }, 
{ 
     "name" : "B", 
     "memberNo" :2 
    }, 
{ 
     "name" : "C", 
     "memberNo" :3 
    }, 
{ 
     "name" : "D", 

    } 
] 

我在列表中的许多元素,并要检查“memberNo”,如果存在的话 我想从列表中的元素数。

例如这里计数将是3

如何检查是否存在密钥并使用scala从列表中获取元素的数量?

回答

4

首先创建类来表示你的输入数据从存储库(或其他数据源)

val disks: List[Disk] = ... 

而且

case class Disk (name : String, memberNo : String) 

下一页负荷数据终于算

disks.count(d => Option(d.memberNo).isDefined) 
+1

请注意,case类很好地代表json数据模型,特别是在与Jackson集成时。看看类似的问题,我给了一个使用Jackson的代码示例:http://stackoverflow.com/a/26494306/1028765 – Nate 2014-10-28 14:06:36

2

以类似的方式如在@SergeyLagutin的答案中,考虑这种情况类

case class Disk (name: String, memberNo: Option[Int] = None) 

缺失memberNo默认为None;并且该列表,

val disks = List(Disk("A", Some(1)), 
        Disk("B", Some(2)), 
        Disk("C", Some(3)), 
        Disk("D")) 

然后用flatMap我们可以过滤掉那些磁盘与一些memberNo,如下,

disks.flatMap(_.memberNo) 
res: List[Int] = List(1, 2, 3) 

即,对于计数,

disks.flatMap(_.memberNo).size 
res: Int = 3 

同样,用于理解,

for (d <- disks ; m <- d.memberNo) yield m 
res: List[Int] = List(1, 2, 3) 
相关问题