Преобразование карты для применения нового пути в списке строк, которые являются URL - PullRequest
0 голосов
/ 23 декабря 2018

У меня есть список строк (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 голосов
/ 24 декабря 2018

Ваш код уже выглядит хорошо.Не уменьшайте читаемость ради того, чтобы сделать его более котлинским.

Если вы все еще хотите увидеть другой путь, взгляните на это:

Если вы хотите избежать избыточности, вы можете отобразитьВы список newsFeeds к списку newsfeedURLs прямо сейчас.Кроме того, вы можете объединить путь или пустую строку, чтобы избежать необходимости ссылаться на url дважды.

newsFeeds.mapNotNull(NewsFeed::newsfeedURL).map { url ->

     url.toString() + if (url.toUri()?.path.isNullOrEmpty()) {
        "/us/json/news"
    } else {
        ""
    }
}
0 голосов
/ 23 декабря 2018

То, что вы написали, уже довольно симпатично.Вы также можете использовать такие функции, как 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() })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...