1

本教程中,我看到了一个用户定义的 lambda 函数的示例。

Function<String, String> toLowerCase = (var input) -> input.toLowerCase();

我想知道如何调用这个函数?我在 jshell 中尝试过,但无法。我可以很好地创建函数:

有任何想法吗?

jshell> Function<String, String> toLowerCase = (var input) -> input.toLowerCase();
toLowerCase ==> $Lambda$16/0x00000008000b3040@3e6fa38a

但似乎无法执行:

jshell> String hi = "UPPER";
jshell> String high;
high ==> null

jshell> toLowerCase(high,low);
|  Error:
|  cannot find symbol
|    symbol:   method toLowerCase(java.lang.String,java.lang.String)
|  toLowerCase(high,low);
|  ^---------^

jshell> 
4

2 回答 2

3

您需要apply以下功能:

toLowerCase.apply(high)

在此处输入图像描述

或将其值分配给另一个变量low,如下所示:

jshell> String low = toLowerCase.apply(high)
low ==> "ggggg"


建议:使用jshell自动补全(在 macOS 上使用 tab 键)来找出所有适用于在声明的变量上调用的方法。

在此处输入图像描述

于 2020-02-26T16:55:04.997 回答
1

你创建了一个实例,一个Function功能接口的类型,它有一个方法Function.apply()。因此,您必须像在 Java 类中一样使用它:

toLowerCase.apply(high);

toLowerCase(high,low);认为low是什么?就像在 Java 中一样,您必须在可用范围内使用已定义的方法和变量。

于 2020-02-26T16:59:12.430 回答