JDK8新特性之lambda表达式

lambda表达式:就是一个可传递的匿名内部类。

使用要求:接口有且仅有一个抽象方法。

使用匿名内部类,但不使用lambda表达式时我们一般使用方式:

接口A:

public interface InterfaceA {
    void execute();
}

匿名内部类调用:

public class LambdaTest {

    @Test
    public void testLambda(){
        (new InterfaceA() {
            @Override
            public void execute() {
            System.out.println("hello a");
            }
        }).execute();
    }
}

使用lambda表达式则可以简化为:

public class LambdaTest {

    @Test
    public void testLambda(){
        // 无参无返回值的lambda表达式
        InterfaceA ab=() -> {System.out.println("hello ab");};
        ab.execute();
    }
}

相比之下,代码简化了很多。

lambda表达式的语法:

1.无参无返回值:() -> {执行代码块}

2.无参有返回值:() -> { 执行代码块; return 返回值};

public interface InterfaceB {

    String getString();
}

 @Test
    public void testLambda2(){
        InterfaceB ab=() -> {
            System.out.println("return string");
            return "hello world";};
       System.out.println(ab.getString());
    }

3.有参无返回值:(参数a,参数b)->{代码块}

// 接口
public interface InterfaceA {
    void execute(String string);
}

// 测试类
public class LambdaTest {

    @Test
    public void testLambda(){
        InterfaceA ab=(a) -> {System.out.println(a);};
        ab.execute("hello");
    }
}
public interface InterfaceA {
    void execute(String string,String string2);
}
 
@Test
public void testLambda(){
    InterfaceA ab=(a,b) -> {System.out.println(a+" "+b);};
    ab.execute("hello","world");
}

4,有参有返回值:(a,b) ->{执行代码块;return 返回值}

public interface InterfaceB {

    String getString(String string,String string2);
}

 @Test
    public void testLambda2(){
        InterfaceB ab=(a,b) -> {
            System.out.println("return string");
            return a+b;};
       System.out.println(ab.getString("hello","world"));
    }

 

你可能感兴趣的:(JDK8新特性之lambda表达式)