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

Java 8 Lambdas执行

水铭晨
2023-03-14
问题内容

如何在Java 8中执行类似的操作?

boolean x = ((boolean p)->{return p;}).apply(true);

现在,我收到以下错误:

此表达式的目标类型必须是功能接口


问题答案:

根据JLS
第15.27节:

如果lambda表达式出现在程序中的某个环境中,而不是赋值上下文(第5.2节),调用上下文(第5.3节)或强制转换上下文(第5.5节),则这是编译时错误。

也可以在return语句中使用lambda表达式。

然后,我们可以用四种不同的方式重写您的示例:

  • 通过创建分配上下文:

    Function<Boolean, Boolean> function = p -> p;
    

    boolean x = function.apply(true);

  • 通过创建调用上下文:

        foobar(p -> p);

    private static void foobar(Function<Boolean, Boolean> function) {
        boolean x = function.apply(true);
    }
  • 通过创建转换上下文:

    boolean x = ((Function<Boolean, Boolean>) p -> p).apply(true);
    
  • 使用一条return语句:

        boolean x = function().apply(true);

    private static Function<Boolean, Boolean> function() {
        return p -> p;
    }

同样,在这个简单的示例中,整个lambda表达式可以重写为:

UnaryOperator<Boolean> function = UnaryOperator.identity();


 类似资料:
  • 我试图改变我的想法,以功能的方式思考,最近面临着这样一种情况,我需要从列表中提取元素,直到满足一个条件,我找不到一个简单自然的方法来实现这一点。显然我还在学习。 假设我有这个清单: 提前感谢您的投入 注意:在发布这篇文章之前,我读了用谓词限制流,但是我不知道如何调整这个答案来解决我的问题。任何帮助将不胜感激。

  • Ruby 程序 Ruby程序的执行就是对代码进行计算的过程。先编译程序文本,遇到BEGIN就对其作出计算;然后计算顶层的一系列的表达式;若遇到END的话,将在最后对其进行处理然后结束程序(关于结束程序时处理步骤的详细过程请参考结束程序时的相关处理)。 语句 if if句的计算过程如下:先对条件表达式进行计算,若为真则执行相应代码段,若为假则依次计算elseif部分的条件表达式,若遇到值为真的表达式

  • 问题内容: 我已经尝试了这两个代码,但是却没有执行,有人可以告诉我为什么吗? 提前致谢 问题答案: 试试这个代码: 它会在源元素的位置单击并按住,移至目标元素的位置,然后释放鼠标。 要么 它将单击并按住源元素的位置,移动给定的偏移量,然后释放鼠标。 要么 它将执行以上两个代码的操作。 我在Java上编写此代码。您可以转换为指定的语言。 从动作引用。

  • 我正在构建一个能够执行Selenium指令和Cucumber指令的框架。我已经在一个单独的空类中为Cucumber创建了runner,代码如下 我还将在一个单独的类中为Selenium指令提供一个处理器。 如果Cucumber运行类是空类,我如何执行它?,我是否只是为Cucumber创建运行类的实例?还是我得去做些别的

  • 在windows上,我可以用ffmpeg剪辑一段带有以下代码的视频。exe 无法在android中使用ffmpeg。我用gradle在我的应用程序中抓取ffmpeg。 我的方法里有这些台词 显示此错误:运行exec()时出错。命令:[/data/data/com.videoeditor.myname.myapp/files/ffmpeg,ffmpeg,-i,/storage/emulated/0/

  • 电磁铁模块 快门线模块

  • 既然已经学了execute和normal!,我们就可以深入探讨一个Vimscript惯用法。 执行下面的命令: :::vim :execute "normal! gg/foo\<cr>dd" 这将移动到文件的开头,查找foo的首次出现的地方,并删掉那一行。 之前我们尝试过用normal!来执行一个搜索命令却无法输入必须的回车来开始进行搜索。 结合execute和normal!将解决这个问题。 e

  • 问题内容: 我有一个http服务器(使用启动),我想做一些操作。 我该怎么做(在Linux上)?在ctrl-C的情况下可以进行那些操作吗? 我不熟悉Unix信号,因此答案可能很简单。 问题答案: 您可以使用信号包订购TERM和INT信号。但是请注意,只有在明确终止进程时才发送这些信号。正常退出(由流程本身启动)不涉及任何信号。我认为,对于正常退出,只需在主例程中执行某些操作即可(该例程应该生成工作