方法引用 / lambda表达式 这样写不可以吗?

微信图片_20191018100317.png
下面的是正确的,上面的是我想写的另一种方式不知道为什么错误,我是初学lambda,还请大佬指教。

阅读 2.4k
3 个回答

java lambda expression:

LambdaExpression:
    LambdaParameters -> LambdaBody 

LambdaParameters -> 是不能省略的

java method reference

MethodReference:
   ExpressionName :: [TypeArguments] Identifier
   Primary :: [TypeArguments] Identifier
   ReferenceType :: [TypeArguments] Identifier
   super :: [TypeArguments] Identifier
   TypeName . super :: [TypeArguments] Identifier
   ClassType :: [TypeArguments] new
   ArrayType :: new 

It is a compile-time error if a method reference expression occurs in a program in someplace other than an assignment context(§5.2), an invocation context(§5.3), or a casting context(§5.5).

MethodReference 不能再附加其它运算了。

只有方法引用才可以在 Lambda 中简写成 类名::方法名 这种双冒号写法,它本身不能再参与表达式计算。

你这里有运算符的只能简写成 e -> e.getAge() <= 35 这种形式,省略大括号和 return

Java 里面的方法引用你可以看作是是创建了匿名类,你的那个表达式就变成了:

new Predicate<Employee>() {
    @Override
    public boolean test(Employee e) {
        return e.getAge();
    }
} <= 35;
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题