【问题标题】:How to add BiFunction on a MAP properly如何在 MAP 上正确添加 BiFunction
【发布时间】:2021-12-08 15:32:55
【问题描述】:
private static final Map<String, BiFunction<String, Player, Player>> SELF_FUNCTION = Map.of
(
    "pAtk", BiFunction<Integer, Player, Player> pAtk = (k, v) -> k.getPAtk(v),
    "mAtk", BiFunction<Integer, Player, Player> mAtk = (k, v) -> k.getMAtk(v),
);

我无法让这段代码正常工作。我想做一个 for entry 并获取 Key 并计算 BiFunction 给出的统计信息,但我无法让它工作。

【问题讨论】:

  • 您不能将变量定义作为参数的一部分。查看您提供的 String 参数。在这里你不会在那里写String s = "pAtk",对吧?只需(k, v) -&gt; k.getPAtk(v) 就足够了
  • 这完全没有意义。在第一行中,您将第一个双功能参数声明为 String,然后在块 zou 中将其声明为 Integer。然后在 lambdas 中(其中 String 或 Integer 被称为 k),你正在调用 k.getPAtk 这当然不是 String 或 Integer 的方法,但可能是 Player(我们只能猜测)。
  • 非常感谢我让它通过“pAtk”工作,L2Character::getPAtk

标签: java lambda functional-interface


【解决方案1】:

BiFunction&lt;T, U, R&gt;定义中T是第一个参数的类型,U是第二个参数的类型,R是返回类型。

因此,假设该类Player 包含方法Player getPAtk(String v)Player getMAtk(String v),则BiFunction&lt;Player, String, Player&gt; 的映射可以创建为:

private static final Map<String, BiFunction<Player, String, Player>> SELF_FUNCTION = Map.of (
        "pAtk", (player, value) -> player.getPAtk(value), // or Player::getPAtk
        "mAtk", (player, value) -> player.getMAtk(value) // or Player::getMAtk
);

或切换 lambda 中的参数以匹配 BiFunction 定义:

private static final Map<String, BiFunction<String, Player, Player>> SELF_FUNCTION = Map.of (
        "pAtk", (value, player) -> player.getPAtk(value),
        "mAtk", (value, player) -> player.getMAtk(value)
);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-08
    • 2013-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多