美文网首页
lambda表达式轻松入门

lambda表达式轻松入门

作者: TechLogs | 来源:发表于2020-03-12 15:23 被阅读0次

我们很多人在第一次接触java8的lambda表达式时,总有些似懂非懂的感觉(特别是一些经验比较丰富的『老』程序员)。下面我们来看看lambda表达式到底是个什么东东。

常见用法举例

  • 排序
//对集合进行排序操作
List<String> names = Arrays.asList("a","c","f","d","b");
//指定排序规则
List<String> sortedList = names
     .stream().sorted(
        (a,b)->a.compareTo(b)
      ).collect(Collectors.toList()); 
//默认字典排序 
List<String> sortedList = names
     .stream().sorted(String::compareTo).collect(Collectors.toList());  
  • 线程
//旧用法(匿名内部类)
new Thread(new Runnable(){
    public void run() {
        System.out.println("hello java");
    }
}).start();

//lambda
new Thread(
  ()->{
       System.out.println("hello java");
  }
).start();

//lambda(当大括号中只有一行代码时,可以省略大括号)
new Thread(
  ()->System.out.println("hello java")
).start();

用法说明

很多人在没搞清楚lambda用法时,都会有这么一种经历,就是看得懂别人写的 lambda表达式对应的功能,而自己写时却无人下手。其实原因很简单,就是不了解lambda表达式是怎么来的。为了搞清楚来龙去脉,让我们先来认识一个新概念:函数式接口(@FunctionalInterface)

函数式接口特点
  1. 接口有且只有一个抽象方法
  2. 允许定义静态方法(static修饰的方法)
  3. 允许定义默认方法(default修饰的方法)
  4. 可以使用@ FunctionalInterface注解声明(只要有且只有一个抽象方法的接口,加不加@ FunctionalInterface注解都是函数式接口,但是如果一个接口不满足第1条规则,加上@ FunctionalInterface注解编译会报错)
函数式接口的书写格式

函数式接口以前的写法,其实就是匿名内部类的写法(以下用Runnable举例,Runnable是JDK提供的一个典型的函数式接口)。对比以下两个用法,你是不是想起了什么,没错,就是lambda表达式写法其实就是函数式接口的简写。

//匿名内部类的写法
Runnable runnable = new Runnable() {
    @Override
    public void run() {
        //做点什么事。。。。
    }
};
//lambda写法
Runnable runnableWithLambda = ()->{
    //做点什么事。。。。
    };
}
用法小结

使用最粗暴的总结,lambda表达式写法,就是把函数式接口的参数和实现体通过"->"操作符进行连接是即可,其实参数列表要用小括号包起来,方法实现体用大括号包起来。

启动线程代码回顾
new Thread(
//下面这行代码,其实就是Runnable的抽象方法run的简写
//因为run方法没有参数,故参数列表部分只有一个小括号'()'
//方法体因为只有一行实现,故把大括号'{}'给省略了
  ()->System.out.println("hello java")
).start();

排序代码回顾
List<String> names = Arrays.asList("a","c","f","d","b");
//指定排序规则
List<String> sortedList = names
     .stream().sorted(
      //下面这行代码是对Comparator接口中compareTo方法的简写
        (a,b)->a.compareTo(b)
      ).collect(Collectors.toList()); 

相关文章

网友评论

      本文标题:lambda表达式轻松入门

      本文链接:https://www.haomeiwen.com/subject/zzxpjhtx.html