JDK8新特性笔记(三):Lambda表达式

JDK8新特性笔记(三):Lambda表达式

在JDK8之前, Java是不支持函数式编程的,所谓的函数编程,即可理解是将一个函数(也称为“行为”)作为一个参数进行行传递, 面向对象编程是对数据的抽象(各种各样的POJO类),而函数式编程则是对行为的抽象(将行为作为一个参数进行传递)

新建线程对比:

// 以前的方式
new Thread(new Runnable() {
    @Override
    public void run() {
        System.out.println("线程名:"+Thread.currentThread().getName());
    }
}).start();
// Lambda方式创建线程
new Thread(()->{
    System.out.println("线程名:"+Thread.currentThread().getName());
}).start();

Lambda方式创建线程方便简洁。

Collection集合排序对比:

List<String> list = Arrays.asList("aaa", "bbb", "ccc", "ddd");
// 以前的方式进行排序
Collections.sort(list, new Comparator<String>() {
    @Override
    public int compare(String o1, String o2) {
        return o2.compareTo(o1);
    }
});
// Lambda方式进行排序
Collections.sort(list,(o1,o2)->o2.compareTo(o1));

// 遍历打印
for (String str:list){
    System.out.println(str);
}

同样是倒序排列,lambda表达式的方式虽然简洁但是看起来并没有以前那样清晰明确省略了一些相关的方法名等信息。

Lambda表达式使用前提:一个接口中只包含一个方法,则可以使用Lambda表达式,这样的接口称之为“函数接口”:(params)->expression

在这里插入图片描述

参数列表:

​ 括号中参数列表的数据类型可以省略不写

​ 括号中的参数只有一个,那么参数类型和()都可以省略不写

方法体:

​ 如果{}中的代码只有一行,无论对应方法有没有返回值都可以省略{}、return、分号;如果是一整块的代码块的话如果有返回值要求就需要return返回。

好处:

​ Lambda表达式的实现方式在本质是以匿名内部类的方式进行实现,编写很简洁。

自定义Lambda

  • 定义一个函数式接口 需要在接口加注解@FunctionalInterface,否则万一忘了或者其他人加了其他方法可能会导致函数式接口失效
  • 编写一个方法,输入需要操作的数据和接口
  • 在调用方法是传入数据和lambda表达式,用来操作数据

定义一个接口做四个实现分别为加减乘除,我的理解是在方法内实现接口的简易方式。

/**
 * description: OperFunction
 *              R返回值 T入参<br>
 */
@FunctionalInterface
public interface OperFunction<R,T> {

    R operator(T t1,T t2);

}
public class Lambda_Demo01 {

    public static void main(String[] args) {
        System.out.println(operatorTest(8,9,(x,y)->x+y));
        System.out.println(operatorTest(8,9,(x,y)->x-y));
        System.out.println(operatorTest(8,9,(x,y)->x*y));
        System.out.println(operatorTest(8,9,(x,y)->x/y));
    }

    // 用作lambda表达式传入方法
    public static Integer operatorTest(Integer x,Integer y,OperFunction<Integer,Integer> operFunction){
        return operFunction.operator(x,y);
    }

}
运行结果:
17
-1
72
0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值