如何从AdDetails集合中提取每个AdMedia的首个AdUri的uri?
解决方案:获取每个AdMedia的第一个AdUri的Uri列表
原代码问题分析
你当前的代码:
val preRollUri=preRollAdDetails.adMedia.flatMap { it.adUri.map { it.uri } }
会把所有AdMedia下的所有AdUri的Uri平铺成一个列表,比如示例数据会得到[adUrl1, url3, adUrl2, url3],这和你需要的「每个AdMedia仅取第一个AdUri的Uri」不符。
正确实现方式
情况1:确保每个AdMedia的adUri列表非空
如果可以保证所有AdMedia的adUri列表都至少有一个元素,直接使用map配合first():
val preRollUri = preRollAdDetails.adMedia.map { it.adUri.first().uri }
执行后会得到预期的[adUrl1, adUrl2]。
情况2:需要处理adUri为空的场景
如果存在adUri列表为空的情况,为避免抛出NoSuchElementException,使用firstOrNull()配合mapNotNull()过滤空值:
val preRollUri = preRollAdDetails.adMedia.mapNotNull { it.adUri.firstOrNull()?.uri }
这样会自动跳过那些没有AdUri的AdMedia,返回仅包含有效Uri的列表。
内容的提问来源于stack exchange,提问作者WISHY
相关产品推荐
相关产品推荐

