在HashMap中声明lambda的正确方法

ben*_*ier 3 java lambda java-8

我正在尝试声明一个HashMap将接受一个字符串并返回一个Callable.

我有:

Map<String, Callable<String>> commands = new HashMap<>();

commands.put("get", (String item) -> get(item));
Run Code Online (Sandbox Code Playgroud)

其中get是一个返回void的函数.

但我得到了

"Bad return type in Lambda expression: Void cannot be converted into a string."
Run Code Online (Sandbox Code Playgroud)

为什么期望函数返回一个字符串?我想通过lambda a Stringvoid回来.

Era*_*ran 5

A Callable<String>有一个返回a String(V call() throws Exception)的方法,因此你不能使用带有void返回类型的lambda.你可以Consumer<String>改用.

Map<String, Consumer<String>> commands = new HashMap<>();

commands.put("get", (String item) -> get(item));
Run Code Online (Sandbox Code Playgroud)