Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Scala获得json中所有元素的总和?_Json_List_Scala - Fatal编程技术网

如何使用Scala获得json中所有元素的总和?

如何使用Scala获得json中所有元素的总和?,json,list,scala,Json,List,Scala,我有以下建议- "disks" : [ { "name" : "v2.16", "diskAggregate" : "aggr0", "diskRPM" : 15000, "totalSizeBytes" : 1077477376, "vendorId" : "NETAPP ", "usedBytes" : 1070071808, "diskType" : "FCAL", "uuid" : "4E455441:50502020:5

我有以下建议-

"disks" : [ {
    "name" : "v2.16",
    "diskAggregate" : "aggr0",
    "diskRPM" : 15000,
    "totalSizeBytes" : 1077477376,
    "vendorId" : "NETAPP  ",
    "usedBytes" : 1070071808,
    "diskType" : "FCAL",
    "uuid" : "4E455441:50502020:56442D31:3030304D:422D465A:2D353230:32353836:30303030:00000000:00000000",
    "portName" : "FC:A ",
    "raidGroup" : "rg0"
}, 
{
    "name" : "v4.16",
    "diskAggregate" : "aggr0",
    "diskRPM" : 15000,
    "totalSizeBytes" : 1077477376,
    "vendorId" : "NETAPP  ",
    "usedBytes" : 1070071808,
    "diskType" : "FCAL",
    "uuid" : "4E455441:50502020:56442D31:3030304D:422D465A:2D353230:32353633:34333030:00000000:00000000",
    "portName" : "FC:B ",
    "raidGroup" : "rg0"
}]
我想从json数组“磁盘”中的所有json对象中添加usedBytes。 我在Scala中试用了fold,但没有得到想要的输出。 这是我的密码-

val datastoreCapacity = disks
val usableSpace = datastoreCapacity.foldLeft(0L) {
    case (sumOfUsedSpace, esxDevice) =>
      val sumOfTotalBytesOnStorageDevice = esxDevice.datastores.foldLeft(0L) {
        case (totalBytesOnDevice, datastore) =>
         // totalBytesOnDevice + ut..getOrElse(0L).toString.toLong
        val sum = datastore.utilization.foldLeft(0L) {
          case (total,util) =>
            total + util.usedBytes.getOrElse(0L).toString.toLong
        }
      }
      sumOfUsedSpace + sumOfTotalBytesOnStorageDevice
  }

如何使用Scala获取已使用字节的总数?

假设磁盘是一个已解析对象的列表,其中包含一个名为usedBytes returning选项Long的getter(如代码所示),则应该执行以下操作:

disks.map(_.usedBytes).flatten.sum
一些解释:

  • 使用
    map
    我们用给定的lambda函数转换所有对象(实际上只调用getter
    usedBytes

  • flatten
    过滤掉所有
    None
    s,并在列表中保留
    Some
    s的值。(也可用于列表列表或向量数组等)

  • sum
    只是按照它所说的做,并构建一组数值的
    sum
    (我们从
    展平
    中得到)


根据您的评论猜测,我假设,尽管有上面的示例数据,磁盘还是有一个属性“利用率”。我不知道这是什么样子,也不知道这意味着什么,因为你的问题不清楚,但如果我假设这是一个磁盘列表的话。然后你可以做下面的事情

disks.flatMap(_.utilization.map(_.usedBytes).flatten).sum

如果这不是您要查找的数据,请指定要处理的数据。

它将只遍历到数据存储。。如何访问“利用率”中的密钥?@Vishwas“利用率”是什么意思?如果你想要完整的答案,你应该发布数据模型类