当前位置: 首页 > 面试题库 >

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

艾凯捷
2023-03-14
问题内容

仅仅使用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);

有任何想法吗?


问题答案:

您已经忘记了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)


 类似资料:
  • 问题内容: 在这篇文章中,我遇到了一些巧妙的代码,可以将Karl的Iterator转换为Stream 。我不得不承认我不完全理解如何在以下代码中将lambda分配给该类型… 我决定编写自己的小型测试,以确保它能够编译和执行。 我的理解是lambda 充当了供应商功能。 Iterable不是FunctionalInterface,因此如何为其分配lambda? 问题答案: 是 不是 “作为一个功能”

  • 问题内容: 我正在使用以下代码: 该值不警报。怎么了 问题答案: 实质上:

  • 如何在Java 8 lambda中使用非final变量。它抛出编译错误,称“封闭范围中定义的局部变量日期必须是final或实际上是final” 我实际上想实现以下目标: 如何实现此目的?它会为 date2 引发 comilation 错误。谢谢

  • 问题内容: 我正在使用Spring MVC。我有一个带有很多静态变量的注释类。我想使用application.properties文件中的值实例化它们。 例如在中,我有: 然后在课堂上是: 我得到了 我也尝试过 接着: 它给出了相同的错误。 问题答案: 你不必在静态字段中保留任何属性。 你不知道何时修改此静态字段 你不知道哪个线程修改了它的价值 任何时候任何线程都可以更改此静态字段的值,并且你被拧

  • 我想将引用分配给变量p: 这样我就可以像这样使用它: 表达式[1]产生编译错误,如何解决? 线程"main"中的异常java.lang.错误:未解决的编译问题: PrintStream类型中的println(Object)类型为void,这与描述符的返回类型void不兼容 如果将更改为,则错误变为: 线程“main”java中出现异常。lang.错误:未解决的编译问题:语法错误,插入“维度”以完成

  • 问题内容: 在上面,这是硬代码。我想将 变量 分配 给值。即,均值=注册; 让我知道! 问题答案: 您的问题不是很清楚。我假设变量是在Servlet中声明的,因为在JSP中使用Java是一种不好的做法。为了能够在转发到JSP的Servlet之间共享变量,您需要将此变量设置为request属性: 然后在JSP中,您可以使用JSP EL获得“ registration”属性的值: 您应该阅读Java