Есть ли способ реализовать ленивую оценку в .filter () .map () .forEach и т. Д. Kotlin? - PullRequest
0 голосов
/ 05 февраля 2019

На мой взгляд, если у меня есть несколько вызовов filter ().Набор будет повторяться несколько раз.Мне нужен код, подобный следующему:

Генерация полного встроенного лучшего.

set.filter{a>10}.filter{a<20}.forEach{doSomething()}
for(e in set){ // Only iterate the set one time.
    if(e.a>10){
        if(e.a<20)
            doSomething()
    }
}

1 Ответ

0 голосов
/ 05 февраля 2019

Я думаю, что вы можете использовать оператор диапазона для этого.

set.filter{ it.a in 10..20 }.forEach{ doSomething() } 

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

set.filter{ isInRange(it.a, x, y) }.forEach{ doSomething() } 

// create a function
fun isInRange(value: Int, x: Int, y: Int) = value in x..y // both inclusive 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...