Java-基础篇-初识Lambda
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();
对比:
- 省略接口名函数名
- 不用再定义接口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/版权声明: 转载请保留原文链接及作者。