Lambda表达式小结
作者:互联网
Lambda 表达式应用
概述
Java中的Lambda表达式是JDK8中的一种新特性,它允许我们将一段代码(这段代码可以理解为一个接口的实现)当成参数传递给某个方法,然后进行业务处理,这种方式更像是一种函数式编程风格,可以让代码结构更简洁,开发效率更高。
应用场景
Java中的Lambda为JAVA编程注入了函数式编程思想,在迭代操作,映射操作,聚合操作等很多方面的实现上做出了很大努力。并从语法角度简化了程序员对特定代码的编写,通过底层的类型推断,方法引用等特性让代码表现的更加优雅。现在已成为我们编程过程中常用的一种编程方式。
快速入门分析
最简单的Lambda表达式可由逗号分隔的参数列表、->符号和语句块组成,例如:
Arrays.asList( "a", "b", "d" ).forEach(
e -> System.out.println( e )
);
在上面这个代码中的参数e的类型是由编译器推理得出的,你也可以显式指定该参数的类型,例如:
Arrays.asList( "a", "b", "d" )
.forEach( ( String e ) -> System.out.println( e ) );
如果Lambda表达式需要更复杂的语句块,则可以使用花括号将该语句块括起来,类似于Java中的函数体,例如:
Arrays.asList( "a", "b", "d" ).forEach( e -> {
System.out.print( e );
} );
lambda 表达式可以让代码编写更加简洁。我们先来思考下普通的函数或方法具备的几个元素:
-
访问修饰符
-
返回值类型
-
方法名
-
参数列表
-
代码块
在lambda 表达式应用过程中,你应该也注意到了,一般只有两个元素:
(parameter list) -> body
其中“->” 将参数列表与函数主体分离,旨在对给定参数进行处理。函数的主体
可能是一条或多条语句。例如其常见结构如下:
() -> statement
arg -> statement
(arg1, arg2, ...) -> { body-block }
(Type1 arg1, Type2 arg2, ...) -> { method-body-block;return value; }
Lambda表达式有返回值,返回值的类型也由编译器推理得出。如果
Lambda表达式中的语句块只有一行,则可以不用使用return语句,下列两个代码片段效果相同:
Arrays.asList( "a", "b", "d" )
.sort( ( e1, e2 ) -> e1.compareTo( e2 ) );
Arrays.asList( "a", "b", "d" ).sort(
( e1, e2 ) -> {
int result = e1.compareTo( e2 );
return result;
} );
应用案例增强分析及实现?
结合对象lambda表达式基本语法的认识,分析如下案例:
简化线程对象创建 |
构建一个线程对象,执行Runnable类型的任务,传统方式的实现,其关键代码如下:
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("hello");
}
}).start();
基于JDK8中的Lambda表达式实现方式,对传统方式线程对象的创建进行简化
,其关键代码如下:
new Thread(()->{
System.out.println("hello");
}).start();
简化排序操作的实现 |
定义一字符串数组,然后对字符串数组中的内容,按字符串元素的长度对其进行排序。代码如下:
String[] strArray= {"abcd","ab","abc"};
在JDK8之前传统的实现方案,基于Arrays类对数组中的元素进行排序操作,关
键代码实现如下:
Arrays.sort(strArray,new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.length()-o2.length();
}
});
基于JDK8中的Lambda表达式,对排序如上排序方案的代码实现过程进行简化
,关键代码如下:
Arrays.sort(strArray, (s1, s2) -> s1.length() - s2.length());
标签:Arrays,代码,System,表达式,小结,asList,Lambda 来源: https://blog.csdn.net/weixin_63835553/article/details/122764979