有没有办法在Kotlin的.filter().map().forEach等中实施延迟评估?

时间:2019-02-05 04:04:59

标签: kotlin

我认为,如果我有多个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 :(得分:0)

我认为您可以使用范围运算符来做到这一点。

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