我正在尝试进行以下编译:
val criteriaList = aList.stream().map { dateRange -> {
Criteria.where("KEY").`is`(dateRange) } }.toList().toTypedArray()
Criteria().orOperator(*criteriaList)
但是:
Criteria().orOperator(*criteriaList)
当前无法编译:
Type mismatch. Required: Array<(out) Criteria!>! Found: Array<(() → Criteria!)!>
为什么?
答案 0 :(得分:2)
您正在将dateRange
映射到() -> Criteria
。
您无需使用花括号将->
之后的内容括起来。还要检查Kotlin reference regarding Lambda expression syntax:
val sum = { x: Int, y: Int -> x + y }
lambda表达式始终被花括号[...]包围,主体在
->
符号之后。如果lambda的推断返回类型不是Unit
,lambda主体内的最后一个(或可能是单个)表达式被视为返回值。
因此,您可以只编写以下内容:
.map { dateRange -> Criteria.where("KEY").`is`(dateRange) }
还请注意,您实际上并不需要呼叫stream()
,但可以直接在其上呼叫map
(除非它不是真正的List
)
因此您的代码可能会简化为:
val criteriaList = aList.map { dateRange -> Criteria.where("KEY").`is`(dateRange) }
.toTypedArray()
或
val criteriaList = aList.map { Criteria.where("KEY").`is`(it) }
.toTypedArray()