Lambda使用(一)

Java8中引入了一个新的操作符 “->” 该操作符称为箭头操作符或 Lambda 操作符箭头操作符将 Lambda 表达式拆分成两部分:
左侧:Lambda 表达式的参数列表;
右侧:Lambda 表达式中所需执行的功能, 即 Lambda 体。
下面以一个简单实例看
首先建一个接口类Info:

public interface Info {
    public void show();
}

以前都是创建一个类,实现Info接口,并重写show方法,

public class MyInfo implements Info {
    @Override
    public void show() {
        System.out.println("The interface is Info");
    }
}

调用的时候如下

    public static void main(String[] args) {
        MyInfo myInfo = new MyInfo();
        myInfo.show();
    }

现在我们用Lambda表达式实现

    public static void main(String[] args) {
        Info info = ()->System.out.println("The interface is Info");
        info.show();
    }

用Lambda表达式实现了Info接口中的show方法,Info info = ()->System.out.println("The interface is Info"); 其中()表示show方法传入的参数为空,System.out.println(“The interface is Info”)表示实现show方法的方法体;info 为实现接口的对象。

下面展示Lambda接口表达式的几种形式

一、接口方法中无参数,无返回值

同上述示例所示。

二、接口方法中有一个参数,无返回值

例如Info1接口中有一个show方法,方法中只有一个参数

public interface Info1 {
    void show(String name);
}

用Lambda表达式实现

    public static void main(String[] args) {
        /*x表示接口方法中传入一个参数,类型会自动推断;
        System.out.println("The interface is " + x)为接口方法show的实现体;
        表示创建了一个对象info1,改对象实现了Info1接口,用实现了接口中的show方法;
        只有一个参数时,(x)的括号可以省略,直接写x*/
        Info1 info1 = (x)->System.out.println("The interface is " + x);
        /*通过创建的info1对象直接调用方法,用法同调用普通的类相同*/
        info1.show("Info1");
    }

运行输出结果:

The interface is Info1

三、接口方法中有多个参数,有返回值

public interface Person {
    Boolean show(String name, int age);
}

假设有一个接口类Person,接口方法中传入姓名和年龄两个参数,下面通过Lambda表达式实现如果某人的年龄小于25岁,表示是一个学生,返回true;如果某人年龄大于25岁,表示是工作者,返回false。

    public static void main(String[] args) {
        /*(x, y)为覆写接口方法show传入的参数;
        {}中方法体为覆写show方法的方法体;
        person为实现接口Person方法创建的对象*/
        Person person = (x, y) -> {
            if (y < 25) {
                System.out.println(x + " is a student");
                return true;
            }else {
                System.out.println(x + " is a worker");
                return false;
            }
        };
        person.show("lzj", 27);
        person.show("Jenken", 20);
    }

运行,输出结果:

lzj is a worker
Jenken is a student

注意:若方法体中只有一条语句,{ }和 return都可以省略不写。
注意:上面Person person = (x, y) -> { …… 实质为Person person = (String x, int y) -> { ,只是由于x和y的类型可以自动推断出,所以一般用的时候不写类型。

四、有些JDK内部的接口可以用Lambda表达式实现

我们在使用多线程的时候,需要创建线程,例如

        Runnable r = new Runnable() {
            @Override
            public void run() {
                System.out.println("Hello World!" + "This is a Thread!");
            }
        };

        r.run();

用Lambda表达式实现,就等价于

        Runnable r = () -> System.out.println("Hello World!" + "This is a Thread!");
        r.run();    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值