映射转换以在URL字符串列表上应用新路径

时间:2018-12-23 17:31:56

标签: kotlin

我有一个字符串列表(newsFeeds),它们是一个链接。其中一些具有路径成分,而另一些则没有。我的目标是仅在存在路径组件时才应用自定义路径组件。我的代码如下。

如何用Kotlin风格编写它?

newsRepository.getAllNewsFeeds().observeForever { newsFeeds ->

    listNewsFeedUrls = newsFeeds.mapNotNull { newsFeed ->

        if (newsFeed.newsfeedURL?.toUri()?.path.isNullOrEmpty()) {
            newsFeed.newsfeedURL + "/us/json/news"
        } else {
            newsFeed.newsfeedURL
        }
    }

}

2 个答案:

答案 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了。您还可以使用诸如filterzip之类的功能,例如:

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() })