2014-10-28 61 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) 
相關問題