我有以下数据类
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 } }
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 }