Java lambda中三元运算符是否为单行表达式?为何代码报错
问题原因
这个报错和三元运算符本身是不是单行表达式无关,核心是你违反了Java lambda表达式的语法规则。
Java的lambda表达式支持两种写法:
- 块体(带大括号)写法:大括号内部是完整的代码块,可包含多条语句,需要返回值时要显式写
return,每条语句末尾必须加结束分号,你第一段能正常运行的代码就是这种写法。 - 表达式体(省略大括号)写法:要求箭头后只能跟单个不带结束分号的表达式,表达式的计算结果会自动作为lambda的返回值,不需要额外写
return。
你第二段代码的错误点就是在三元运算符末尾多写了一个分号:
// 错误写法:表达式末尾多了分号 Collections.sort(employees, (employee1, employee2) -> employee1.getAge() >= employee2.getAge() ? -1 : 1; );
编译器读到这个多余的分号时,会认为lambda的定义已经提前结束,后续的)就成了非法语法,因此抛出你遇到的编译错误。
修复方案
删掉三元运算符末尾的分号即可正常编译运行:
// 正确的省略大括号写法 Collections.sort(employees, (employee1, employee2) -> employee1.getAge() >= employee2.getAge() ? -1 : 1 );
内容的提问来源于stack exchange,提问作者user13081445
相关产品推荐
相关产品推荐

