我有一个字符串列表(newsFeeds),它们是一个链接。其中一些具有路径成分,而另一些则没有。我的目标是仅在存在路径组件时才应用自定义路径组件。我的代码如下。
如何用Kotlin风格编写它?
newsRepository.getAllNewsFeeds().observeForever { newsFeeds ->
listNewsFeedUrls = newsFeeds.mapNotNull { newsFeed ->
if (newsFeed.newsfeedURL?.toUri()?.path.isNullOrEmpty()) {
newsFeed.newsfeedURL + "/us/json/news"
} else {
newsFeed.newsfeedURL
}
}
}
答案 0 :(得分:2)
您的代码已经看起来不错。不要为了使它变得更像Kotlinish而降低可读性。
如果您仍然想看看另一种方式,请看一下:
如果要避免冗余,可以立即将newsFeeds
列表映射到newsfeedURLs
列表。另外,您可以连接路径或空字符串,以避免两次引用url
。
newsFeeds.mapNotNull(NewsFeed::newsfeedURL).map { url ->
url.toString() + if (url.toUri()?.path.isNullOrEmpty()) {
"/us/json/news"
} else {
""
}
}
答案 1 :(得分:1)
您所写的已经是Kotlinish了。您还可以使用诸如filter
,zip
之类的功能,例如:
val result = newsFeeds.filter { it.newsfeedURL != null && it.newsfeedURL.toUri().path.isNullOrEmpty()}
.map { "${it.newsfeedURL}/us/json/news" }
.zip(newsFeeds.filter { it.newsfeedURL != null && !it.newsfeedURL.toUri().path.isNullOrEmpty() })