【问题标题】:How to covert the follow code to lamba?如何将以下代码转换为 lambda?
【发布时间】:2018-04-26 16:46:15
【问题描述】:

我正在学习 lambda,我知道 3 步规则是:

  1. 删除方法名称
  2. 删除参数类型
  3. 删除 return 语句


MyInterface myInterface = new MyInterface() 
{
    @Override
    public void printMe(String message) {
        System.out.println(message);
    }
};

是答案

MyInterface myInterface = new MyInterface(message -> message);

或者

MyInterface myInterface = message -> System.out.println(message);

或者我可能都错了......?

【问题讨论】:

  • 对于这类问题,您只需在自己喜欢的 IDE 上运行即可自行回答。

标签: java lambda syntax java-8


【解决方案1】:

第二个选项是正确的。但请注意,您可以使用方法引用进一步清理代码:

MyInterface myInterface = System.out::println;

【讨论】:

    【解决方案2】:
    MyInterface myInterface = new MyInterface(message -> message);
    

    上面的代码行给你编译错误。但是你的最后一个选项是正确的。

    您可以使用method reference 或编写自己的lambda 表达式

    MyInterface myInterface = System.out::println; // using method reference
    

    MyInterface myInterface = message-> System.out.println(message);
    

    【讨论】:

      【解决方案3】:

      我将添加一个要点以完成其他答案:

      1. 在哪里可以使用 lambda?

      您可以在函数上下文中使用 lambda 表达式 接口(简而言之,功能接口是一个接口 只指定一个抽象方法)

      所以你的接口MyInterface应该是一个函数式接口。

      1. 函数描述符。

      函数接口中的抽象方法被调用 function descriptor,因此为了将 lambda 表达式分配给 函数式接口,lambda 应该与 抽象方法

      例如,您的接口 MyInterface 仅接收带有字符串参数且不返回任何内容 (void) 的 lambda。


      附加内容

      java.util.function 包包含许多可以帮助您工作和使用 lambdas 的函数式接口,因此我们可以说您的接口是 Consumer 类型,这是一个接收对象的函数式接口输入并(消费)返回 void,见Package java.util.function

      【讨论】:

        猜你喜欢
        • 2019-08-16
        • 1970-01-01
        • 2018-04-27
        • 1970-01-01
        • 2021-08-24
        • 1970-01-01
        • 1970-01-01
        • 2014-03-18
        • 2022-01-15
        相关资源
        最近更新 更多