如何将以下代码转换为lamba?

时间:2018-04-26 16:46:15

标签: java lambda syntax java-8

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

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

  4. 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);
    

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

3 个答案:

答案 0 :(得分:3)

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

MyInterface myInterface = System.out::println;

答案 1 :(得分:1)

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

上面的代码行为您提供了编译错误。您的上一个选项是正确的。

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

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

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

答案 2 :(得分:0)

我将添加一个重点来完成其他答案:

  1. 你在哪里可以使用lambdas?
  2.   

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

    因此,您的界面 MyInterface 应该是一个功能界面。

    1. 函数描述符。
    2.   

      调用功能界面中的抽象方法    function descriptor ,所以为了给一个lambda表达式赋值   功能接口,lambda应该具有相同的签名   抽象方法

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

      其他

      java.util.function 包中包含许多可以帮助您处理和使用lambdas的Functional接口,因此我们可以说您的接口是Consumer类型,这是一个功能接口输入中的对象和(使用它)返回void,请参阅Package java.util.function