Lambda表达式的简单使用

1、Lambda表达式的概念

Lambda表达式,也可称为闭包。类似于JavaScript中的闭包,它是推动Java8发布的最重要的新特性。

作用:

lambda运行将函数作为一个方法的参数,也就是函数作为参数传递到方法中。使用lambda表达式可以让代码更加简洁。

lambda表达式,只能实现函数式接口。

2、Lambda表达式的语法

1.函数式接口

如果说,⼀个接口中,要求实现类必须实现的抽象方法,有且只有⼀个!这样的接口,就是函数式接口。

interface Test{
    public void test();
}

2.@FunctionalInterface

是⼀个注解,用在接口之前,判断这个接口是否是⼀个函数式接口。 如果是函数式接口,没有任何问题。如果不是函数式接口,则会报错。功能类似于 @Override。

@FunctionalInterface
interface Test{
    public void test();
}

 报错情况:

 3.Lambda表达式的语法

Lambda表达式的基础语法

lambda表达式的基础语法:
接口 接口名 (参数1,参数2,…) -> {
方法体
};

接口:需要实现的函数式接口

参数部分:方法的参数列表,要求和实现的接口中的方法参数部分⼀致,包括参数的数量和类型。

方法体部分 : 方法的实现部分,如果接口中定义的方法有返回值,则在实现的时候,注意返回值的返回。

-> : 分隔参数部分和方法体部分。

代码示例:

1.无参无返回值
public interface Test {
    public void test();
}

public class TestImpl {
    public static void main(String[] args) {
        Test test = () -> {
            System.out.println("无参无返回值的使用");
        };
        test.test();
    }
}

运行结果:

 2.有参无返回值
public interface Test {
    public void test(String name);
}
public class TestImpl {
    public static void main(String[] args) {
        Test test = (name) -> {
            System.out.println(name+"的使用");
        };
        test.test("有参无返回值");
    }
}

运行结果:

  3.无参有返回值
public interface Test {
    public String test();
}
public class TestImpl {
    public static void main(String[] args) {
        Test test = () -> {
            return "无参有返回值的使用";
        };
        String str = test.test();
        System.out.println(str);
    }
}

 运行结果:

4.有参有返回值
public interface Test {
    public String test(String name);
}
public class TestImpl {
    public static void main(String[] args) {
        Test test = (name) -> {
            return name+"的使用";
        };
        String str = test.test("有参有返回值");
        System.out.println(str);
    }
}

 运行结果:

方法体部分与参数部分的精简 
参数部分的精简
参数的类型

由于在接口的方法中,已经定义了每⼀个参数的类型是什么。而且在使用lambda表达式实现接口的时候,必须要保证参数的数量和类 型需要和接口中的方法保持⼀致。因此,此时lambda表达式中的参数的类型可以省略不写。

参数的小括号

如果方法的参数列表中的参数数量 有且只有⼀个,此时,参数列表的小括号是可以省略不写的。

public interface Test {
    public String test(String name);
}
public class TestImpl {
    public static void main(String[] args) {
        Test test = name -> {
            return name+"的使用";
        };
        String str = test.test("有参有返回值");
        System.out.println(str);
    }
}
方法体部分的精简 
方法体⼤括号的精简

当⼀个方法体中的逻辑,有且只有⼀句的情况下,⼤括号可以省略

public interface Test {
    public void test(String name);
}
public class TestImpl {
    public static void main(String[] args) {
        Test test = name -> System.out.println(name+"方法体⼤括号的精简");
        test.test("这是");
    }
}

运行结果:

return的精简 

如果⼀个方法中唯⼀的⼀条语句是⼀个返回语句, 此时在省略掉大括号的同时, 也必须省略掉return。

public interface Test {
    public String test(String name);
}
public class TestImpl {
    public static void main(String[] args) {
        Test test = name ->  name+"return的精简";
        String str = test.test("这是");
        System.out.println(str);
    }
}

运行结果:

3.Lambda表达式的优缺点

  • 优点:
  1. 使代码更简洁,紧凑
  2. 可以使用并行流来并行处理,充分利用多核CPU的优势
    有利于JIT编译器对代码进行优化
  • 缺点:
  1. 非并行计算情况下,其计算速度没有比传统的 for 循环快
  2. 不容易调试
  3. 若其他程序员没有学过 Lambda 表达式,代码不容易看懂
  • 26
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值