Java-基础篇-初识Lambda

  1. 1. 介绍
  2. 2. Lambda表达式使用
    1. 2.1 无参函数的简写
    2. 2.2 有参函数的简写
    3. 2.3 更多合法的书写形式
  3. 3.简写依据
    1. 3.1 依据一:函数接口
    2. 3.2 依据二:类型推断机制

1. 介绍

Lambda表达式是Java8的新特性,一个最为重要用法是简化某些匿名内部类的写法。在加上结合新增的的流相关的 API使用,让我这个java小白觉得相当牛x,至于多牛x,上代码体验。一起学习吧..

2. Lambda表达式使用

2.1 无参函数的简写

需求: 新建一个线程

  • Java8以前的代码
new Thread(new Runnable(){
    // 接口名
    @Override
    public void run(){
      // 方法名
      System.out.println("Thread1 run()");
    }
}
).start();
  • 采用Lambda简写
// 单行代码
new Thread(
  () -> System.out.println("Thread1 run()")
).start();

// 多行代码块时的写法
new Thread(
  () -> {
      System.out.println("Hello Thread1 ");
      System.out.println("Thread1 run()")
  }
).start();

对比:

  1. 省略接口名函数名
  2. 不用再定义接口Runnable的匿名对象

2.2 有参函数的简写

需求: 给一个字符串列表通过自定义比较器,按照字符串长度进行排序

  • Java8以前的代码
List<String> list = Arrays.asList("PHP", "JAVA", "GO", "PYTHON");
// 定义一个实现Comparator接口的,匿名类
Collections.sort(list, new Comparator<String>(){
    // 重载接口中的方法
    @Override
    public int compare(String s1, String s2){
        if(s1 == null)
            return -1;
        if(s2 == null)
            return 1;
        return s1.length()-s2.length();
    }
});
  • 采用Lambda简写
// JDK8 Lambda表达式写法
List<String> list = Arrays.asList("PHP", "JAVA", "GO", "PYTHON");
// 省略Comparator接口实现类、compare方法、参数的类型
Collections.sort(list, (s1, s2) ->{
    if(s1 == null)
        return -1;
    if(s2 == null)
        return 1;
    return s1.length()-s2.length();
});

2.3 更多合法的书写形式

// Lambda表达式的书写形式
Runnable run = () -> System.out.println("Hello World");// 1
ActionListener listener = event -> System.out.println("button clicked");// 2
Runnable multiLine = () -> {// 3 代码块
    System.out.print("Hello");
    System.out.println(" Hoolee");
};
BinaryOperator<Long> add = (Long x, Long y) -> x + y;// 4
BinaryOperator<Long> addImplicit = (x, y) -> x + y;// 5 类型推断
  • 1处展示了无参函数的简写
  • 2处展示了有参函数的简写,以及类型推断机制
  • 3处是代码块的写法
  • 4处和5处再次展示了类型推断机制

3.简写依据

3.1 依据一:函数接口

能够使用Lambda的依据是必须有相应的函数接口(函数接口,是指内部只有一个抽象方法的接口)。这意味着你并不能在代码的任何地方任性的写Lambda表达式

3.2 依据二:类型推断机制

Lambda表达式另一个依据是类型推断机制,在上下文信息足够的情况下,编译器可以推断出参数表的类型,而不需要显式指名


转载请注明来源,欢迎指出任何有错误或不够清晰的表达。

文章标题:Java-基础篇-初识Lambda

文章字数:663

本文作者:猿码记

发布时间:2019-12-11 21:20

原始链接:liuqh.icu/2019/12/11/java-12-初识Lambda/

版权声明: 转载请保留原文链接及作者。

目录
×

看您心情~~