I have the following data class
data class AdDetails(val adMedia: List<AdMedia>)
data class AdMedia(val adMetaInfo: AdMetaInfo, val adUri:List<AdUri>)
data class AdUri(val width:Int,val height:Int,val uri:String)
data class AdMetaInfo(var adTitle: String, var adId: String)
This is the smaple data
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)])])
From this I want list of only 1st ad URI - adUrl1 , adUrl2
I am using map / flatmap for this but not getting desired output
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]
To filter out null values:
val result = details.adMedia.map { it.adUri.firstOrNull()?.uri }.filterNotNull()
println(result) // Output: [adUrl1, adUrl2]
If it is guaranteed that there won't be any empty list in any of the AdUris in any of the AdMedias, the following will do (but would crash if there is an empty list):
val result = details.adMedia.map { it.adUri.first().uri }