我跟随Json-
"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数组'disks'中的所有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获取已用字节总数?
答案 0 :(得分:2)
假设磁盘是已解析对象的列表,其中一个名为usedBytes的getter返回选项为Long(如代码所示),这应该是:
disks.map(_.usedBytes).flatten.sum
一些解释:
使用map
我们使用给定的lambda函数(基本上只调用getter usedBytes
)转换所有对象。
flatten
过滤掉所有None
个,并在列表中保留Some
s的值。 (也可用于列表或向量列表等等。)
sum
只是执行它所说的内容并构建数值集合的sum
(我们从flatten
得到的结果)
从您的评论中猜测我假设尽管上面的示例数据,磁盘具有属性利用率。我不知道它看起来是什么样的,它意味着什么,因为你的问题不清楚,但如果我认为它再次是一个带磁盘的列表。然后你可以做以下
disks.flatMap(_.utilization.map(_.usedBytes).flatten).sum
如果您不在寻找的位置,请指定您要处理的数据。