【发布时间】:2017-07-02 16:31:06
【问题描述】:
我有一个需要应用过滤器的对象数组。
val filteredList = list.filter{ l => (pid == "") ? true : l.ProviderId.toUpperCase().contains(pid.toUpperCase()))}
Scala 编译器未编译此代码。我收到类似的错误 1)价值?不是布尔值的成员 2) 类型 toUpperCase 不是字符串的成员。
谁能帮我在scala的过滤器函数中编写这个三元运算符。
我同意我可以编写一个自定义函数来处理@Ternary Operators in Scala 中提到的这个问题 但是,我对为什么此语句存在编译错误感兴趣。 因为,这是 Java 中的有效语句。
【问题讨论】:
-
什么是
pid?你的意思是l == ""? -
不是您问题的直接答案,但
if (pid == "") true是多余的。你可以把这个表达式写成pid == "" || l.ProviderId.toUpperCase().contains(pid.toUpperCase()) -
pid 是我从 UI 传递的一个搜索参数,我需要根据它过滤掉列表。 ||运营商是一个很好的解决方案。但我很感兴趣,为什么 scala 中的这个语句会出现编译错误。不幸的是,这个问题已经有很多人不喜欢了。
-
出现错误,因为 Scala 中不存在该语法。正如另一个问题的答案中所解释的,if-else 是 Scala 中的表达式,因此不需要它。
标签: scala filter ternary-operator