Как я могу использовать функцию поиска расширений в kotlin и иметь ее индекс в лямбда-выражении - PullRequest
1 голос
/ 26 февраля 2020

У меня есть список строк. Я использую Kotlin с Android. Я хочу найти указанную c строку, которая соответствует условию, я хочу знать:

  • , если эта строка существует
  • , если она делает то, что индекс

Кроме того, это код, который я написал, но он не оптимизирован, поскольку использование find и indexOf равно O(n^2)

list.find { it == "slug"}
    ?.also{
           // do some logic
           list2.add(list.indexOf("slug")
          }

1 Ответ

2 голосов
/ 26 февраля 2020

Просто используйте indexOf в первую очередь. Возвращает -1, если элемент не найден, поэтому вы можете либо проверить его внутри своего блока also, либо превратить его в обнуляемое с помощью takeIf:

list.indexOf("slug").takeIf{ it > -1 }?.also {
    //do some logic
    list2.add(it)
}

. Совет: если ваш список отсортирован, вы Возможно, вы захотите использовать бинарный поиск вместо indexOf для повышения производительности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...