java 8 - 声明要在 map 中使用的方法,稍后将值传递给该方法

java 8 - declare method to use in map, and pass the value to the method later on

我希望能够在 map 中声明方法以预先使用 BUT,指定要传递给函数的参数 NOT 在声明映射和实现 FunctionalInterface 时,而不是在使用它时。

示例 - 方法 DateTime.now().minusMinutes(int minutes)。我想把这个方法放在 map 中并根据一些字符串键调用它,BUT 我想在使用它时指定要传递给该方法的 int 分钟。这可能吗?

如果可能的话,我认为它看起来像这样:

@FunctionalInterface
interface TimeFrame {
    DateTime createTimeFrame(int value);
}

private Map<String, TimeFrame> map = new HashMap<String, TimeFrame>() {{
        map.put("minutes", () -> DateTime.now().minusMinutes());
}}

为了使用它,理想情况下,我想将 4 传递给 minusMinutes() 方法

DateTime date = map.get("minutes").createTimeFrame(4);

当然这不是编译,但想法是在没有参数的情况下预先声明方法,然后将参数传递给 minusMinutes()

这可以做到吗?

看来您缺少的是将 int 参数添加到 lambda 表达式中:

@FunctionalInterface
interface TimeFrame {
    DateTime createTimeFrame(int value);
}

...

map.put("minutes", i -> DateTime.now().minusMinutes(i));

现在

DateTime date = map.get("minutes").createTimeFrame(4);

应该可以。

您只需要稍微不同地定义您的 lambda 函数。

map.put("minutes", (mins) -> DateTime.now().minusMinutes(mins))

mins 是一个参数,对应于您的功能接口中的 value。你可以随意称呼它; mins 只是一个建议。