如何在 Java 8 中将 lambda 分配给变量?

2022-08-31 17:39:53

只是在Java 8中玩新的lambda和功能特性,我不知道该怎么做。

例如,以下内容是有效的:

    Map<String, Integer> map = new HashMap<>();
    map.put("A", 1);
    map.put("B", 2);
    map.put("C", 3);
    map.compute("A", (k, v) -> v == null ? 42 : v + 41));

但下面给我语法错误:

    BiFunction x = (k, v) -> v == null ? 42 : v + 41;
    map.compute("A", x);

有什么想法吗?


答案 1

您已经忘记了 :BiFunction

public static void main(final String[] args) throws Exception {
    final Map<String, Integer> map = new HashMap<>();
    map.put("A", 1);
    map.put("B", 2);
    map.put("C", 3);
    final BiFunction<String, Integer, Integer> remapper = (k, v) -> v == null ? 42 : v + 41;
    map.compute("A", remapper);
}

运行:

PS C:\Users\Boris> java -version
java version "1.8.0-ea"
Java(TM) SE Runtime Environment (build 1.8.0-ea-b120)
Java HotSpot(TM) 64-Bit Server VM (build 25.0-b62, mixed mode)

答案 2

正如鲍里斯蜘蛛所指出的那样,你面临的具体问题是泛型。根据上下文,在 lambda 周围添加显式 {} 块将有助于增加清晰度,并且可能需要这样做。

有了这个,你会得到这样的东西:

BiFunction<String, Integer, Integer> x = (String k, Integer v) -> {v == null ? 42 : v + 41};

如果您发布了语法错误,那么对于遇到相同问题的未来读者来说,这将非常有用,以便可以将它们编入索引。

此链接提供了一些可能有帮助的其他示例。


推荐