андроидные запросы с несколькими областями с помощью RXJava

Я поддерживаю приложение, которое не сделал сам.

Приложение работает на специальном устройстве Android, которое может считывать штрих-коды с использованием лазерного луча, и после ввода штрих-кода приложение начинает проверять через lal базы данных Realms, если такой код существует, дело в том, что поисковых запросов много, потому что приложение должно ищите все мелкие буквы и все заглавные штрих-коды.

Каждый элемент базы данных содержит 3 штрих-кода и один раз код UPC, который должен выполнять метод поиска для всех и возврата ответа.

Код ниже

fun readItemByMKTorUPC(Value : String,callback:NewCountingPresenter.findItem{ doAsync { val realm = Realm.getDefaultInstance() var findVal : ItemRealmSearchOnly? = ItemRealmSearchOnly() //--------------------MKT------------------------------- //search for MKT findVal = realm.where(ItemRealmSearchOnly::class.java).contains("company_id",MyApplication.instance.company.companyNameId)?.equalTo("MKT",Value)?.findFirst() //if not found search for UPC Upper if(findVal?.MKT.isNullOrEmpty()){ val Value :String = Value.toUpperCase(); findVal = realm.where(ItemRealmSearchOnly::class.java).contains("company_id",MyApplication.instance.company.companyNameId)?.equalTo("UPC",Value)?.findFirst() } //if not found search for MKT Lower Case if(findVal?.MKT.isNullOrEmpty()){ val Value :String = Value.toLowerCase(); findVal = realm.where(ItemRealmSearchOnly::class.java).contains("company_id",MyApplication.instance.company.companyNameId)?.equalTo("MKT",Value)?.findFirst() } //if not found search for MKT UPPER Case if(findVal?.MKT.isNullOrEmpty()){ val Value :String = Value.toUpperCase(); findVal = realm.where(ItemRealmSearchOnly::class.java).contains("company_id",MyApplication.instance.company.companyNameId)?.equalTo("MKT",Value)?.findFirst() } //--------------------UPC------------------------------- //if not found search for UPC if(findVal?.MKT.isNullOrEmpty()){ val Value :String = Value findVal = realm.where(ItemRealmSearchOnly::class.java).contains("company_id",MyApplication.instance.company.companyNameId)?.equalTo("UPC",Value)?.findFirst() } //if not found search for UPC Lower if(findVal?.MKT.isNullOrEmpty()){ val Value :String = Value.toLowerCase(); findVal = realm.where(ItemRealmSearchOnly::class.java).contains("company_id",MyApplication.instance.company.companyNameId)?.equalTo("UPC",Value)?.findFirst() } //--------------------MKT 2------------------------------- //if not found search for MKT 2 if(findVal?.MKT.isNullOrEmpty()){ val Value :String = Value; findVal = realm.where(ItemRealmSearchOnly::class.java).contains("company_id",MyApplication.instance.company.companyNameId)?.equalTo("MKT2",Value)?.findFirst() } //if not found search for MKT 2 Upper if(findVal?.MKT.isNullOrEmpty()){ val Value :String = Value.toUpperCase(); findVal = realm.where(ItemRealmSearchOnly::class.java).contains("company_id",MyApplication.instance.company.companyNameId)?.equalTo("MKT2",Value)?.findFirst() } //if not found search for MKT 2 lower if(findVal?.MKT.isNullOrEmpty()){ val Value :String = Value.toLowerCase(); findVal = realm.where(ItemRealmSearchOnly::class.java).contains("company_id",MyApplication.instance.company.companyNameId)?.equalTo("MKT2",Value)?.findFirst() } //--------------------MKT3------------------------------- //if not found search for MKT 3 if(findVal?.MKT.isNullOrEmpty()){ val Value :String = Value.toUpperCase(); findVal = realm.where(ItemRealmSearchOnly::class.java).contains("company_id",MyApplication.instance.company.companyNameId)?.equalTo("MKT3",Value)?.findFirst() } //if not found search for MKT 3 Upper if(findVal?.MKT.isNullOrEmpty()){ val Value :String = Value.toUpperCase(); findVal = realm.where(ItemRealmSearchOnly::class.java).contains("company_id",MyApplication.instance.company.companyNameId)?.equalTo("MKT3",Value)?.findFirst() } //if not found search for MKT 3 lower if(findVal?.MKT.isNullOrEmpty()){ val Value :String = Value.toUpperCase(); findVal = realm.where(ItemRealmSearchOnly::class.java).contains("company_id",MyApplication.instance.company.companyNameId)?.equalTo("MKT3",Value)?.findFirst() } var item : ItemRealm = ItemRealm(); item.MKT = findVal?.MKT; item.MKT2 = findVal?.MKT2; item.MKT3 = findVal?.MKT3; item.UPC = findVal?.UPC; item.AMOUNT = findVal?.AMOUNT; uiThread { callback.clickHere(item); } } } 

Проблема с этим методом заключается в том, что для каждого из этих запросов требуется много времени, чтобы возвращать ответ пользователю

Я думал о интеграции метода RxJava 2 для этого кода, но не смог найти полезных советов, как это сделать в Интернете.

Редактировать:

Я нашел решение благодаря тому, что Тим Кастельинс намекнул на комментарии

  MyApplication.instance.printLog("scanner start: MKT"); findVal = realm.where(ItemRealmSearchOnly::class.java) .contains("company_id",MyApplication.instance.company.companyNameId) ?.equalTo("MKT",Value) ?.or()?.equalTo("MKT",Value.toUpperCase()) ?.or()?.equalTo("MKT",Value.toLowerCase()) ?.or()?.equalTo("UPC",Value) ?.or()?.equalTo("UPC",Value.toLowerCase()) ?.or()?.equalTo("UPC",Value.toUpperCase()) ?.or()?.equalTo("MKT2",Value) ?.or()?.equalTo("MKT2",Value.toLowerCase()) ?.or()?.equalTo("MKT2",Value.toUpperCase()) ?.or()?.equalTo("MKT3",Value) ?.or()?.equalTo("MKT3",Value.toLowerCase()) ?.or()?.equalTo("MKT3",Value.toUpperCase()) ?.findFirst(); MyApplication.instance.printLog("scanner end: MKT"); 

что улучшило время поиска на 200% по сравнению со старым методом

Intereting Posts
Есть ли лучший способ для фильтра null в списке? Как поместить файлы res из проекта в банку в одной папке? Firebase & Retrieving Elements Kotlin coroutines в Android: зачем использовать bg () из Anko вместо async ()? Kotlin: Public получить частный набор var Несоответствие типа Kotlin после преобразования в Android Studio Новое – неразрешенная ссылка: kotlinx Нельзя ли градировать проект построения, когда я добавляю класс ChatInformation kotlin, который расширяет RealmObject до моего проекта, где ошибка? Android запускает статический ярлык приложения Как работать весело получить (индекс: Int): Char? Джексон-десериализация – классы данных Kotlin – значения по умолчанию для отсутствующих полей на картографе Дисперсия типа Коттина и звездная проекция Что такое idomatic способ обновления с использованием RxBinding на SwipeRefreshLayout kotlin jvmname игнорируется Gradle? Kotlin JSR-223 ScriptEngineFactory в толстой банке – Не удается найти компилятор kotlin компилятора