Java中Lambda表达式——列出的这几种格式你都会吗?

Lambda表达式想必大家都不陌生,jdk8的新特性,Lambda表达式需要函数式接口的支持,所谓函数式接口就是只有一个方法的接口,可以通过注解@FunctionalInterface来检查该接口是否是函数式接口,如下图左就是函数式接口,而右则不是。

下面来一个我们比较常见的例子,线程的例子,我们创建一个线程,一般会去重写Runnable接口,原始的方法就是用匿名内部类,现在有了Lambda表达式,就显得更加简便

首先以创建一个线程为例子

package com.zhiying;

public class MyTest {
    public static void main(String[] args) {

        //传统的方法
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("hello world");
            }
        }).start();

        // 用Lambda表达式一
        new Thread(() -> System.out.println("hello")).start();

        // 用Lambda表达式二
        new Thread(() -> {
            System.out.println("hello");
        }).start();

    }
}

 

下面进行Lambda的详细介绍

格式一:无参数,无返回值

package com.zhiying;

@FunctionalInterface
public interface Hello {
    public void add();
}
package com.zhiying;

public class MyTest {
    public static void main(String[] args) {
        Hello hello1 = () -> {
            System.out.println("hello world");
        };
        hello1.add();

        // 只有一句的时候可以省略{}
        Hello hello2 = () -> System.out.println("hello world");
        hello2.add();
    }
}

格式二:有一参数,无返回值

package com.zhiying;

@FunctionalInterface
public interface Hello {
    public void add(int a);
}
package com.zhiying;

public class MyTest {
    public static void main(String[] args) {
        // 只有一个参数的时候,()可以省
        Hello hello1 = (a) -> System.out.println(a);
        hello1.add(2);

        Hello hello2 = a -> System.out.println(a);
        hello2.add(3);
    }
}

格式三:有多参数,无返回值

package com.zhiying;

@FunctionalInterface
public interface Hello {
    public void add(int a,int b);
}
package com.zhiying;

public class MyTest {
    public static void main(String[] args) {
        Hello hello = (a,b) -> System.out.println(a + b);
        hello.add(1,2);
    }
}

格式四:有返回值

package com.zhiying;

@FunctionalInterface
public interface Hello {
    public int add(int a,int b);
}
package com.zhiying;

public class MyTest {
    public static void main(String[] args) {
        Hello hello1 = (a,b) -> {
            System.out.println("hello world");
            return a + b;
        };
        System.out.println(hello1.add(1,2));

        // 如果只有一条返回语句,return和{}可以都省略
        Hello hello2 = (a,b) ->  a + b;
        System.out.println(hello1.add(2,2));
    }
}

发布了387 篇原创文章 · 获赞 255 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/HeZhiYing_/article/details/104209057