Java8新特性 lambda表达式

函数式接口就是只显式声明一个抽象方法的接口。为保证方法数量不多不少,java8提供了一个专用注解@FunctionalInterface,这样,当接口中声明的抽象方法多于或少于一个时就会报错。如下图所示:

Lambda表达式

Lambda表达式本质上是一个匿名方法。让我们来看下面这个例子:

public int add(int x, int y) {
    return x + y;
}

转成Lambda表达式后是这个样子:

(int x, int y) -> x + y;

参数类型也可以省略,Java编译器会根据上下文推断出来:

(x, y) -> x + y; //返回两数之和

或者

(x, y) -> { return x + y; } //显式指明返回值

可见Lambda表达式有三部分组成:参数列表,箭头(->),以及一个表达式或语句块。

Lambda表达式和函数式接口结合

步骤:

  1. 新建无参函数式接口(先演示无参);
  2. 新建包含属性为函数式接口的类;
  3. 实现函数式接口;
  4. 测试函数式接口的方法;
@FunctionalInterface
public interface InterfaceWithNoParam {
    void run1();
}

 

//匿名内部类
    InterfaceWithNoParam param1 = new InterfaceWithNoParam() {
        @Override
        public void run1() {
            System.out.println("通过匿名内部类实现run()");
        }
    };
    //Lambda表达式
    //空括号表示无参
    InterfaceWithNoParam param = () -> System.out.println("通过Lambda表达式实现run()") ;
  @Test
    public void testIntfaceWithNoparam() {

        this.param.run1();
        this.param1.run1();
    }

其他形式的函数式接口及实现

上述内容实现了无参无返回值的函数接口与实现,当然还有其他形式:

  1. 有参无返回值
  2. 无参有返回值
  3. 有参有返回值

以下是我写的测试例子:

package lambda;

@FunctionalInterface
public interface InterfaceWithParams {
    void run(String param);
}
package lambda;

@FunctionalInterface
public interface InterfaceWithNoParam {
    void run1();
}
package lambda;
@FunctionalInterface
public interface InterfaceUnVoidWithParams {

    String run(String param);

}
package lambda;

import org.junit.Test;

public class TestJava8 {

    //匿名内部类
    InterfaceWithNoParam param1 = new InterfaceWithNoParam() {
        @Override
        public void run1() {
            System.out.println("通过匿名内部类实现run()");
        }
    };
    //Lambda表达式
    //空括号表示无参
    InterfaceWithNoParam param = () -> System.out.println("通过Lambda表达式实现run()") ;

    @Test
    public void testIntfaceWithNoparam() {

        this.param.run1();
        this.param1.run1();
    }
    // lambda
    InterfaceWithParams interfaceWithParams = (String param) -> System.out.println("lambda表达式有参无返回值," + param) ;

    // 匿名内部类
    InterfaceWithParams interfaceWithParams02 = new InterfaceWithParams() {
        @Override
        public void run(String param) {
            System.out.println("匿名内部类表达式有参无返回值," + param);
        }
    };

    @Test
    public void testIInterfaceWithParam(){
        interfaceWithParams02.run("匿名内部类");
        interfaceWithParams.run("lambda");

    }

    // lambda  有参有返回值
//    InterfaceUnVoidWithParams interfaceUnVoidWithParams = (String s) -> { return "您输入的是" + s; };
    InterfaceUnVoidWithParams interfaceUnVoidWithParams = (String s) -> "您输入的是" + s;

    InterfaceUnVoidWithParams interfaceUnVoidWithParams01 = new InterfaceUnVoidWithParams() {
        @Override
        public String run(String s) {
            return "您输入的是" + s;
        }
    };
    @Test
    public void testInterfaceUnVoidWithParams(){
        String a = interfaceUnVoidWithParams.run("lambda");
        System.out.println(a);
        String b = interfaceUnVoidWithParams01.run("匿名内部类");
        System.out.println(b);
    }

}

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值