Lambda表达式只能用与之相同的方法使用吗';在(Java)中重新定义?

Lambda表达式只能用与之相同的方法使用吗';在(Java)中重新定义?,java,lambda,Java,Lambda,我看到了所有这些示例,其中Lambda表达式被定义并在下一行中使用。因此,在我所看到的每个示例中,Lambda的定义方法与使用的方法相同。这仅仅是因为这些例子,还是没有实际的方法将两者分开? 换句话说,是否可以调用在不同方法或甚至不同类中定义的Lambda函数?Lambda表达式可用于声明变量。下面是一个示例,其中lambda表达式用于存储Stream.filter()的谓词。当您确实想要重用零件时,这种方法可能很有用。我使用相同的方法进行了声明,但是您可以在类中轻松地将其声明为私有final成

我看到了所有这些示例,其中Lambda表达式被定义并在下一行中使用。因此,在我所看到的每个示例中,Lambda的定义方法与使用的方法相同。这仅仅是因为这些例子,还是没有实际的方法将两者分开?
换句话说,是否可以调用在不同方法或甚至不同类中定义的Lambda函数?

Lambda表达式可用于声明变量。下面是一个示例,其中lambda表达式用于存储Stream.filter()的谓词。当您确实想要重用零件时,这种方法可能很有用。我使用相同的方法进行了声明,但是您可以在类中轻松地将其声明为私有final成员变量

private void aaa() {
    Predicate<? super String> theLambdaEx = (a -> a.toLowerCase(Locale.ROOT).startsWith("a"));
    List<String> s = new ArrayList<>();
    s.stream().filter(theLambdaEx).collect(Collectors.toList());
}
private void aaa(){

谓词Lambda表达式可用于声明变量。下面是一个示例,其中Lambda表达式用于存储流的谓词。filter()。当您确实希望重用零件时,这种方法可能会很有用。我使用相同的方法进行了声明,但您可以在类中轻松地将其声明为私有final成员变量

private void aaa() {
    Predicate<? super String> theLambdaEx = (a -> a.toLowerCase(Locale.ROOT).startsWith("a"));
    List<String> s = new ArrayList<>();
    s.stream().filter(theLambdaEx).collect(Collectors.toList());
}
private void aaa(){

谓词lambda表达式定义的类型理论上可以在任何地方使用,因此我相信您的问题源于这样一个事实,即您只看到了有限的示例

我研究过几个代码库,其中方法返回lambda表达式指定的函数接口的实现。我可以给出一个简单的示例:

公共A类{
公共静态谓词startsWithA(){
返回input->input.startsWith(“A”);
}
}
公共B级{
公共静态void main(字符串[]args){
System.out.println(A.startsWithA().test(“Aardvark”);
}
}

lambda表达式定义的类型理论上可以在任何地方使用,因此我相信您的问题源于这样一个事实,即您只看到了有限的示例

我研究过几个代码库,其中方法返回lambda表达式指定的函数接口的实现。我可以给出一个简单的示例:

公共A类{
公共静态谓词startsWithA(){
返回input->input.startsWith(“A”);
}
}
公共B级{
公共静态void main(字符串[]args){
System.out.println(A.startsWithA().test(“Aardvark”);
}
}

如果您引用了该lambda-当然。否则您就不能真正这样做。同样,如果不传递或共享,您也不能使用另一个方法中定义的
int
变量。是否见过使用lambda的流API的代码?这些lambda就是您正在寻找的。它们在中的某个类中被调用流API,当然不是您将lambda放入其中的类。如果您有对该lambda的引用,则可以确定。否则您无法真正执行此操作。同样,如果不传递或共享,您无法使用另一个方法中定义的
int
变量。是否见过使用lambda的流API的代码?这些lambd它们是在流API的某个深层类中调用的,当然不是与放置lambda的类相同的类。