Каким образом использование функций функции Kotlin делает этот кусок кода приятнее? - PullRequest
1 голос
/ 10 июля 2019

У меня есть этот кусок кода, и мне не нравится, что у меня есть mapNotNull, а внутри у меня есть еще случаи, которые возвращают ноль, я думаю, что моих знаний kotlin недостаточно, чтобы сделать это лучше, какие-либо мысли?

    return config.mainMenus.mapNotNull { mainMenu ->
      val subPage = config.subPages.find {
        if (mainMenu.actions.isNotEmpty()) {
          it.id == mainMenu.actions.first().contentId
        } else {
          false
        }
      }
      if (subPage?.items?.isNotEmpty() != null) {
        MenuItem(mainMenu.type, mainMenu.titles, mainMenu.actions[0].type, subPage.items)
      } else {
        null
      }
    }
  }


  val programs = cards.mapNotNull { card ->
              if (card is Program) {
                epgRepository.getProgramProgress(currentTime = currentTime, program = card)
              } else {
                null
              }
            }

1 Ответ

1 голос
/ 10 июля 2019

Вы можете заменить предыдущий код на

            return config.mainMenus.mapNotNull { mainMenu ->
        config.subPages
                .find{mainMenu.actions.firstOrNull()?.contentId?.equals(it.id)?:false}
                ?.let{menu->
                    MenuItem(mainMenu.type, mainMenu.titles, mainMenu.actions[0].type, menu.items).takeIf{menu.items?.isNotEmpty()==true}
                }?:null
    }
}

Второй может быть

  val programs = cards.
      filterIsInstance<Program>().
      map { epgRepository.getProgramProgress(currentTime = currentTime, program = card)}

В этом случае вы сначала фильтруете коллекцию, получая только те элементы, которые являются программами, и только те, которые преобразованы в тип, возвращаемый функцией getProgramProcess

...