从列表中获取第一个元素的列表?

问题描述 投票:0回答:1

我有以下数据类

data class AdDetails(val adMedia: List<AdMedia>)

data class AdMedia(val adMetaInfo: AdMetaInfo, val adUri:List<AdUri>)
data class AdUri(val width:String,val height:String,val uri:String)
data class AdMetaInfo(var adTitle: String, var adId: String)

这是样本数据

AdDetails(adMedia=[AdMedia(adMetaInfo=AdMetaInfo(adTitle=1, adId=1), 
adUri=[AdUri(width=640, height=360, uri=adUrl1), 
AdUri(width=426, height=240, uri=url3)])])

AdDetails(adMedia=[AdMedia(adMetaInfo=AdMetaInfo(adTitle=2, adId=2), 
adUri=[AdUri(width=640, height=360, uri=adUrl2), 
AdUri(width=426, height=240, uri=url3)])])

从这里我只想要第一个广告 URI 的列表 - adUrl1,adUrl2

我正在为此使用地图/平面地图,但没有获得所需的输出

 val preRollUri=preRollAdDetails.adMedia.flatMap { it.adUri.map { it.uri } }
list kotlin dictionary flatmap
1个回答
0
投票
data class AdDetails(val adMedia: List<AdMedia>)
data class AdMedia(val adMetaInfo: AdMetaInfo, val adUri: List<AdUri>)
data class AdMetaInfo(var adTitle: String, var adId: String)
data class AdUri(val width: String, val height: String, val uri: String)

val details = AdDetails(
  listOf(
    AdMedia(
      AdMetaInfo("1", "1"),
      listOf(
        AdUri("640", "360", "adUrl1"),
        AdUri("426", "240", "url3")
      )
    ),
    AdMedia(
      AdMetaInfo("2", "2"),
      listOf(
        AdUri("640", "360", "adUrl2"),
        AdUri("426", "240", "url3")
      )
    ),
    AdMedia(
      AdMetaInfo("3", "3"),
      emptyList()
    )
  )
)

val result = details.adMedia.map { it.adUri.firstOrNull()?.uri }

println(result)   // Output: [adUrl1, adUrl2, null]

要过滤掉空值:

val result = details.adMedia.map { it.adUri.firstOrNull()?.uri }.filterNotNull()

println(result)   // Output: [adUrl1, adUrl2]

如果保证在任何 AdMedias 中的任何 AdUris 中都不会出现空列表,则将执行以下操作(但如果有空列表,则会崩溃):

val result = details.adMedia.map { it.adUri.first().uri }
© www.soinside.com 2019 - 2024. All rights reserved.