Код Refator, написанный в Kotlin более функциональным способом - PullRequest
0 голосов
/ 08 января 2020

Интересно, как я могу изменить этот рабочий код в Kotlin, чтобы он выглядел более функциональным и, возможно, более элегантным?

val validBrands = asList(*banners!!.split(",".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray())
val stores = storeCouponProducerService.getStores() //this is the list of Store object that has 3 variables.
val brandsWithDivs:MutableList<Pair<String, String>> = ArrayList()
for(store in stores){
    val brand = storeCouponProducerService.normalizeBrands(store.brand)
    if (validBrands.contains(brand)){ //perhaps ".filter" method could be used here.
        val division = store.managementDivisionNumber
        val pair = Pair(brand, division)
        brandsWithDivs.add(pair)
    }
}

Большое спасибо заранее.

Ответы [ 2 ]

3 голосов
/ 08 января 2020

Вы можете использовать лямбда-выражения (с неявным аргументом ), map и filter для замены l oop всего три строки.

Ваш код должен выглядеть примерно так:

val brandsAndDivs = stores
    .filter { normalize(it.brand) in validBrands }
    .map { Pair(it.brand, it.division) }
1 голос
/ 08 января 2020
val brandsWithDivs = stores.map{ it to storeCouponProducerService.normalizeBrands(store.brand)} // creates a pair of store and brand
                           .filter{ validBrands.contains(it.second) }
                           .map{ Pair(it.second, it.first.managementDivisionNumber) }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...