【Java Lambda系列】Lambda必知必会的基础知识

一、前言

Lambda表达式是Java8开始出现的新特性,相信现在应该有很多小伙伴用着Java8+版本,写的却是Java7的代码。接下来我们就一起开启Lambda的学习吧!

二、你要懂的几个概念

  • 什么是接口默认方法?

使用default关键字在接口中添加方法实现,如下代码:

public interface IDefaultMethod {
    default void printDefault() {
        System.out.println("Hello default method");
    }
}
// test
void testDefaultMethod() {
   IDefaultMethod iDefaultMethod = new IDefaultMethod() {};
   iDefaultMethod.printDefault();
}
  • 什么是函数式接口?

有且仅有一个抽象方法声明的接口(但接口可以有多个默认方法),当然为了让编译器能够识别,更建议你在接口上增加@FunctionalInterface用以标记(非必须使用,但是强烈建议标注),此时添加编译器则会给出报错提示,函数式接口如下:

@FunctionalInterface
public interface IFunctionalMethod {
    void helloWord();

    default void printDefault() {
        System.out.println("Hello default method");
    }

    default void printDefaultJava() {
        System.out.println("Hello default java");
    }
}
// test
public void test(){
    IFunctionalMethod iFunctionalMethod = new IFunctionalMethod() {
        @Override
        public void helloWord() {
            System.out.println("impl hello word");
        }
    };
    iFunctionalMethod.helloWord();
    iFunctionalMethod.printDefault();
    iFunctionalMethod.printDefaultJava();
}
  • 什么是Lambda表达式?
  • 是一个匿名函数,可以当作参数传递;

需要注意的是,lambda并不是任何地方都可以使用,需要特定的函数式接口进行匹配。
如果你正在使用idea进行开发,你会发现在IFunctionalMethod的测试代码部分我们声明的函数,idea会建议我们Replace with lambda, 如下图:
在这里插入图片描述

调整后的lambda代码如下:

public void testLambda(){
    IFunctionalMethod iFunctionalMethod = () -> System.out.println("impl hello word");
    iFunctionalMethod.helloWord();
    iFunctionalMethod.printDefault();
    iFunctionalMethod.printDefaultJava();
}

通过上面几个基础概念和简单的例子演示,我们可以看出Lambda让代码更加简洁、紧凑,接下来我们趁着打铁,赶快看看Lambda更多的骚操作!

三、Lambda表达式语法结构

任何一种语法都有它的使用规则,Lambda当然也不例外,我们来看看Lambda的语法结构:
(参数列表) -> {方法体}
参数列表对应的是抽象方法的参数箭头 “->” 是固定位置的固定写法将参数和方法体之间,方法体即Lambda主体对应的是抽象方法的实现。

  • 案例
public interface LambdaExample {
    String helloLambda(String param);
}
// test
LambdaExample lambdaExample = (String param) -> {
            System.out.println("第一个lambda语法展示");
            return param;
        };

四、Lambda语法其他场景实践

通常我们在实际使用Lambda的时候会基于语法结构进行一系列的简化操作(总而言之,能少写点就少写点)

  • 参数类型可以省略
LambdaExample lambdaExample = (param) -> {
            System.out.println("第二个lambda语法展示");
            return param;
        };
  • 抽象方法参数只有一个,可以去掉参数的括号,如果是多个参数不允许哦!
LambdaExample lambdaExample = param -> {
            System.out.println("第三个lambda语法展示");
            return param;
        };
  • 如果方法体只有一行代码如下
LambdaExample lambdaExample = param -> { return param; };
// 可以将方法体的{}也省略,如果有返回值,那么return也可以省略
// 上述代码最终优化为
LambdaExample lambdaExample = param -> param;

五、总结

  • 本章主要针对Lambda的概念、语法、基本用法进行一些简要的描述,并提供一些示例代码;
  • Lambda在某些场景允许简化,本章仅对Lambda的语法结构进行简化,后续章节我们会讲述其他简化方案。
  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值