本文来探讨java 1.8开始的lamda(λ)表达式

λ表达式是什么呢?

java是面向对象的语言。什么都是对象,对象是类的实例(通过类new出来的)。这样做的好处就是用面向对象的思想来写代码。

但是,大家写程序的时候,往往是写一个方法然后去执行这个方,面向对象的处理的步骤就显得繁锁。步骤如下:

1.定义一个类。2在类里写对应的方法。3.调用这个类的方法(如果是静态方法,直接 类名.method;如果非静态方法,还需要new一个对象)

上面三个步骤是针对类里面的方法来说的。如果是接口里面的方法。本来接口是不能new的。但是java为了简化上面的步骤,new 接口,就相当于创建了一个匿名类。因此可以省略步骤1.

举几个例子如下:

  • 1.线程的创建。Thread 的构造方法中需要传入一个Runnable接口。

利用接口创建Thread,代码如下:

 Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                while(true){
                    System.out.println("线程在运行中");
                }
            }
        });
  thread.start();

利用λ表达式创建Thread,代码如下:

  Thread thread = new Thread(()->{while(true){
            System.out.println("线程在运行中");
        }});
  thread.start();
  • 2.集合类排序

利用接口排序代码如下:

List<Integer> list = Arrays.asList(34,23,5,67,43);
list.sort(new Comparator<Integer>() {
    @Override
    public int compare(Integer o1, Integer o2) {
    return o1-o2;
    }
});

利用λ表达式简化,代码如下:

 List<Integer> list = Arrays.asList(34,23,5,67,43);
 list.sort((o1, o2) -> o1-o2);

通过上面两个例子,可以发现。java中方法的入参可以是一个接口。比如list.sort方法,入参就是Comparator接口。有兴趣的同学可以跟踪jdk源码发现,list的排序,主要是利用了Comparator接口的compare方法。由于java是面向对象的语言,他的方法的入参只能是一个对象而不能是一个方法。但是编程需要入参是方法。那么这个问题是怎么解决的呢?由于java的方法的定义最简洁的方式是定义在接口中,因此当java中某个方法需要传入方法时,可以new一个接口,new一个接口相当于一个匿名类的对象。

  • 3.自定义方法,方法的入参含有接口,并利用该接口中的方法

    方法说明如下:定义一个方法compareTwoStr,方法有三个入参 。分别如下 String str1,String str2, BiFunction bi 。方法返回的值通过BiFunction 的apply方法比较。代码如下:

      public static boolean  compareTwoStr(String str1, String str2,      BiFunction<String,String,Boolean> biFunction){
            return biFunction.apply(str1,str2);
        }
        
        public static void main(String[] args) {
            //判断字符串是否相等
            boolean isEqual = compareTwoStr("s1","s1",(s1,s2)->s1.equals(s2));
            //判断字符串长度是否相等
            boolean lengthEquals = compareTwoStr("s12332","s1ss",(s1,s2)->s1.length() == s2.length());
            System.out.println(isEqual);
            System.out.println(lengthEquals);
        }

    看到没有,BiFunction接口实际上只有一个作用,提供apply方法。具体方法的逻辑是什么,可以通过λ表达式来实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值