java 8 - 在HashMap中存储方法并从map中的方法获取返回值

Ofe*_*mon 4 java lambda java-8 functional-interface

我想将方法​​指针存储在map中,以便根据字符串值执行它们.从我发现的,我可以Map<String, Runnable>用来做,但问题是我想从方法中获得返回值.

说我有这样的事情:

private Map<String, Runnable> timeUnitsMap = new HashMap<String, Runnable>() {{
    timeUnitsMap.put("minutes", () -> config.getMinutesValues());
}}
Run Code Online (Sandbox Code Playgroud)

该方法config.getMinutesValues()来自另一个类.

我如何int value = timeUnitsMap.get("minutes").run();在地图中存储或存储其他内容(而不是Runnable)以便从地图中的函数中获取值?

Sam*_*Sam 9

Runnable不返回值.你应该使用SupplierCallable代替.

Supplier和之间的主要区别CallableCallable允许您抛出已检查的异常.然后,您必须在任何地方处理该异常的可能性Callable.Supplier你的用例可能更简单.

你需要改变你Map<String, Runnable>Map<String, Supplier<Integer>>.lambda函数本身不需要改变.

@assylias在评论中指出你也可以使用Map<String, IntSupplier>.使用IntSupplier避免装箱你intInteger.

  • @OfekAgmon请取消您的编辑,并提出另一个单独的问题.您的原始问题已得到解答. (2认同)