Java8-在HashMap中存储方法并从map中的方法获取返回值
我想在映射中存储方法指针,以便根据字符串值执行它们。从我发现的内容中,我可以使用Java8-在HashMap中存储方法并从map中的方法获取返回值,java,lambda,java-8,functional-interface,Java,Lambda,Java 8,Functional Interface,我想在映射中存储方法指针,以便根据字符串值执行它们。从我发现的内容中,我可以使用Map来执行此操作,但问题是我想从方法中获取返回值 假设我有这样的东西: private Map<String, Runnable> timeUnitsMap = new HashMap<String, Runnable>() {{ timeUnitsMap.put("minutes", () -> config.getMinutesValues()); }} private
Map
来执行此操作,但问题是我想从方法中获取返回值
假设我有这样的东西:
private Map<String, Runnable> timeUnitsMap = new HashMap<String, Runnable>() {{
timeUnitsMap.put("minutes", () -> config.getMinutesValues());
}}
private Map timeUnitsMap=new HashMap(){{
timeUnitsMap.put(“分钟”,()->config.getMinutesValues());
}}
方法config.getMinutesValues()
来自另一个类
如何执行
int value=timeUnitsMap.get(“分钟”).run()
或在映射中存储其他内容(而不是Runnable
),以便从映射中的函数获取值?Runnable
不会返回值。您应该使用供应商
或可调用
Supplier
和Callable
之间的主要区别在于Callable
允许您抛出选中的异常。然后,无论您在哪里使用可调用的
,都必须处理该异常的可能性<代码>供应商对于您的用例来说可能更简单
您需要将地图
更改为地图
。lambda函数本身不需要更改
@assylias在评论中指出,你也可以使用
Map
。使用IntSupplier
避免将int
装箱为Integer使用而不是Runnable您将需要使用Callable而不是Runnable,并且还需要重写call()方法
您可以从以下片段中获得线索:
private Map<String, Callable<Integer>> timeUnitsMap = new HashMap<String, Callable<Integer>>(){
{timeUnitsMap.put("minutes", () -> call());}};
您是否知道可以编写配置::getMinutesValues
?而不是()->config.getMinutesValues()
?或者在这种特定情况下更可能编写IntSupplier
。@assylia是个好主意!我不会想到的。谢谢你的回答。我还有另外一个问题,就是编辑了原来的问题。非常感谢您的回答。@OfekAgmon请取消您的编辑,并提出另一个单独的问题。您原来的问题已得到回答。同意;每个帖子有一个问题可以让网站井然有序。尽管如此,请随意发布另一个单独的问题,我很乐意看一看。
@Override
public Integer call() throws Exception {
return 1;
}