如何使用scala从列表中删除空列表?

时间:2014-11-06 11:41:11

标签: list scala

我有以下列表结构 -

List(List(()), List(()), List(()), List(()), List(()), List(()), List(()), List(()), List(()), List(()), List(()), List(()), List(()), List(()), List(()), List(()), List(()), List(()), List(()), List({"esx":"192.168.20.52","vm":" naa.60a9800042704577762b45634476337a ","datastore":"","vNic":"","portGroupVLan":"","vSwitch":"","physicalNic":"","lunName":"lun_30102014_101347)","writeIops":44998,"readIops":1635,"latency":47008,"serialNumber":"BpEwv+EcDv3z","usedSize":0,"totalSize":4,"availableSize":4,"throughput":null}, (), ()), List(()), List(()), List(()), List(()), List(()), List(()), List(()), List(()), List(()), List(()), List(()), List(()), List(()), List(()), List(()), List(()), List(()), List(()), List(()), List((), (), ()), List(()), List(()), List(()), List(()), List(()), List(()), List(()), List(()), List(()), List(()), List(()), List(()), List(()), List(()), List(()), List(()), List(()), List(()), List(()), List((), (), ()), List(()), List(()), List(()), List(()), List(()), List(()), List(()), List(()), List(()), List(()), List(()), List(()), List(()), List(()), List(()), List(()), List(()), List(()), List(()), List((), (), ()))

我想从上面删除所有空列表。 我希望输出为 -

List({"esx":"192.168.20.52","vm":" naa.60a9800042704577762b45634476337a ","datastore":"","vNic":"","portGroupVLan":"","vSwitch":"","physicalNic":"","lunName":"lun_30102014_101347)","writeIops":44998,"readIops":1635,"latency":47008,"serialNumber":"BpEwv+EcDv3z","usedSize":0,"totalSize":4,"availableSize":4,"throughput":null})

如何使用scala获得以上输出?

1 个答案:

答案 0 :(得分:2)

如果您的输入是这样的,即您只有list(list(list()))深度,则对flatten的双重调用将解决它。

val x = yourList
x.flatten.flatten

如果您的列表中有不同深度的空列表,则需要不断展平直到达到固定点:

val x = yourList
var y = x.flatten
var z = y.flatten
while (y != z) {
   y = z
   z = z.flatten
y

希望有所帮助:)