欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

死磕Lambda表达式(一):初识Lambda,

来源: javaer 分享于  点击 6619 次 点评:250

死磕Lambda表达式(一):初识Lambda,


弱小和无知不是生存的障碍,傲慢才是。——《三体》

什么是Lambda表达式

Lambda表达式是表示可传递匿名函数的一种简洁方式,Lambda表达式没有名称,但是有参数列表、函数主体、返回类型,还可能有一个可以抛出的异常列表。它是Java8新增的特性,有了它我们再也不用像之前那样写一堆笨重的匿名类代码了,我们先来体验一下。

欢迎关注微信公众号:万猫学社,每周一分享Java技术干货。

与匿名函数对比

下面我们先举个例子,有这样一个表示口罩的类:

package one.more.study;

/**
 * 口罩
 */
public class Mask {
    /**
     * 品牌
     */
    private String brand;
    /**
     * 类型
     */
    private String type;

    public String getBrand() {
        return brand;
    }

    public void setBrand(String brand) {
        this.brand = brand;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }
}

再创建一个口罩列表,添加一些口罩对象:

List<Mask> maskList = new ArrayList<>();
maskList.add(new Mask("3M", "KN95"));
maskList.add(new Mask("3M", "FFP2"));
maskList.add(new Mask("Honeywell", "KN95"));
maskList.add(new Mask("Honeywell", "N95"));

现在我们按照品牌给这个口罩列表进行排序。在Java8之前,我们可以用匿名函数进行实现:

maskList.sort(new Comparator<Mask>() {
    @Override
    public int compare(Mask o1, Mask o2) {
        return o1.getBrand().compareTo(o2.getBrand());
    }
});

我们再使用Lambda表达式实现一下:

maskList.sort((Mask o1, Mask o2) -> o1.getBrand().compareTo(o2.getBrand()));

显而易见,使用Lambda表达式以后,代码看起来更清晰更简洁了。假如你还是一脸懵圈的话也没关系,这里我只是想显摆一下Lambda表达式很牛掰,接下来我会一点点地详细讲解清楚。

欢迎关注微信公众号:万猫学社,每周一分享Java技术干货。

Lambda表达式的组成

Lambda表达式由三部分组成,以上面的口罩排序的例子为例,如下图:

maskList.sort((Mask o1, Mask o2) -> {
    return o1.getBrand().compareTo(o2.getBrand());
});

欢迎关注微信公众号:万猫学社,每周一分享Java技术干货。

Lambda表达式的基本语法

从上面的例子中的两个种写法中,可以看出Lambda表达式有两种基本语法,分别如下:

只看这两条干瘪的语法,理解起来比较困难,实践出真知,我们来多举几个例子。

欢迎关注微信公众号:万猫学社,每周一分享Java技术干货。

Lambda表达式示例

(Mask o1, Mask o2) -> o1.getBrand().compareTo(o2.getBrand())
(Mask mask) -> mask.getBrand()
(Mask mask) -> mask.getType() == "N95"
() -> 996
(int x, int y) -> {
    System.out.println("万猫学社想对你说:");
    System.out.println("第一个参数是:" + x);
    System.out.println("第二个参数是:" + y);
    System.out.println("两数之和是:" + (x + y));
}

欢迎关注微信公众号:万猫学社,每周一分享Java技术干货。

小测试

看了这么多的例子,是不是撸胳膊挽袖子准备大干一场?别急,检验出真知,我们先简单测试一下。以下的Lambda表达式有哪几个是正确的?

请思考片刻…
.
.
.

.
.
.

欢迎关注微信公众号:万猫学社,每周一分享Java技术干货。

宣布答案:第1、2和4个是正确的,第3和5个是错误的。我们来逐个分析一下:

如果你全部答对,恭喜你,你已经基本掌握Lambda表达式的基本语法;如果你有答错的,没关系,重新再看一遍,再复习巩固一下。
学习的路上,我与你一起前行。

欢迎关注微信公众号:万猫学社,每周一分享Java技术干货。

相关文章

    暂无相关文章
相关栏目:

用户点评