在HashMap中声明lambda的正确方法

时间:2016-07-06 09:22:38

标签: java lambda java-8

我正在尝试声明一个HashMap,它会接受一个字符串并返回Callable

我有:

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

commands.put("get", (String item) -> get(item));

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

但我得到了

"Bad return type in Lambda expression: Void cannot be converted into a string."

为什么期望函数返回一个字符串?我想将lambda传递给String并返回void

2 个答案:

答案 0 :(得分:5)

Callable<String>有一个返回StringV call() throws Exception)的方法,所以你不能使用带有void返回类型的lambda。您可以改为使用Consumer<String>

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

commands.put("get", (String item) -> get(item));

答案 1 :(得分:0)

Callable<String>的lambda表示作为值放入地图的正确语法是:

Map<String, Callable<String>> commands = new HashMap<>();
commands.put("get", () -> "some value");

这是因为功能接口Callable<T>有一个返回T值的方法。