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

spr*_*boy 45 java lambda java-8

只是在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));
Run Code Online (Sandbox Code Playgroud)

但以下给出了语法错误:

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

有任何想法吗?

Bor*_*der 41

你已经忘记了你的泛型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);
}
Run Code Online (Sandbox Code Playgroud)

运行:

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)
Run Code Online (Sandbox Code Playgroud)

  • 在以前版本的Java`final`中需要@sproketboy才能在匿名类中访问本地变量.在Java 8中,这已经发生了变化,现在的要求是变量是"有效的最终",即如果编译器确定变量未被重新分配.特色...... (2认同)