首页 / JAVA / Java8新特性之Lambda
Java8新特性之Lambda
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java8新特性之Lambda,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3078字,纯文字阅读大概需要5分钟。
内容图文
![Java8新特性之Lambda](/upload/InfoBanner/zyjiaocheng/596/1887a898baf64b7fbd6a0e0295054e7e.jpg)
Java8新特性之Lambda
前言
??Java8 已经发布了很长一段时间,随之而来的也带给我们很多好用的新特性,比如Lambda表达式,Stream流式处理,Functional函数式编程,Optional,CompletableFurture多并发处理等等。
??下面我将通过一些简单易懂的例子来一起学习一下Java8带给我们的这些新特性的使用及说明,每一种特性我会通过一篇文章来给大家介绍~
PS:建议大家结合《Java 8 In Action》这本书来学习,文章中的大部分用例也是出自这本书的。
一、一个例子解释何为Lambda?
package com.zero.java;
/**
* Description: java8
* Created by zero on 2021/3/25 22:05
*/
public class LambdaTest {
public static void main(String[] args) {
new Thread(() -> {
System.out.println("Thread name:" + Thread.currentThread().getName());
}).start();
}
}
??可以看到上述这段代码,在Main函数里边创建了一个线程,并打印当前线程的线程名。这段代码很简单,但是里边有一个写法很奇特,就是() -> {…}。好了,不用多说,这就是lambda表达式。为什么在Java 8中要引入这个呢?因为“需求总是变化的”。在之前,创建一个线程我们可能要extends Thread,或者implements Runnable,然后重写run方法实现我们的业务逻辑。
二、Lambda表达式的特点
?从上边的对比就可以看出,lambda表达式具有的特点有以下几点:
- 匿名:它不像普通的方法那样有一个明确的名称:写得少而想得多!
- 函数:Lambda函数不像方法那样属于某个特定的类。但和方法一样,Lambda有参数列表、函数主体、返回类型,还可能有可以抛出的异常列表。
- 传递:Lambda表达式可以作为参数传递给方法或存储在变量中。
- 简洁:无需像匿名类那样写很多模板代码。
?由上边的例子可以看出一个lambda表达式主要由三部分构成:
- 参数列表:由()组成的一组参数,某些情况下是可以不用的,比如一个参数,lambda会根据进行类型推导
- 箭头函数:指向函数主体
- 函数主体:由{}包围的一组代码,在某些情况下是可以不用的,比如只有一条语句的时候
?上边的例子中的打印也可以写成下面这种形式:
new Thread(() -> System.out.println("Thread name:" + Thread.currentThread().getName())).start();
?几种lambda表达式的形式:
- () -> {} 无参无返回
- () -> “Zero” 无参返回特定字符
- () -> {return “Zero”;} 无参返回特定字符,效果同上
- (Integer i) -> return “Alan” + i; 有参有返回,但是函数体只有一条语句,不能用;结尾,不合法
- (String s) -> {“IronMan”;} 有参有返回,但函数体用{}包裹,故应显示的增加return关键字
何时使用Lambda?
?引用书中的一句话就是“在函数式接口上使用lambda”。什么是函数式接口?简单来说就是只定义了一个抽象方法的接口,如Runnable,Callable,Comparator等等,如下所示:
public interface Comparator<T> {
int compare(T o1, T o2);
}
public interface Runnable{
void run();
}
public interface ActionListener extends EventListener{
void actionPerformed(ActionEvent e);
}
public interface Callable<V>{
V call();
}
public interface PrivilegedAction<V>{
V run();
}
几个例子展示lambda的使用
1、匿名,如创建线程,如上例子
2、方法引用
// 方法引用
personList.sort(Comparator.comparing(Person::getAge));
personList.sort((p1, p2) -> p1.compareTo(p2));
3、Stream API中的各种处理
personList.stream().filter(p -> p.name.equals("Zero")).map(Person::getName).collect(Collectors.toList());
总结一下
?以上就是个人对lambda的理解学习,主要包括lambda的特点,结构,使用场景等做了大体的一个介绍,详细内容如复合lambda表达式,函数式接口等内容可参考书中内容。
PS:例子中的代码在个人仓库 https://github.com/lissic/java8
内容总结
以上是互联网集市为您收集整理的Java8新特性之Lambda全部内容,希望文章能够帮你解决Java8新特性之Lambda所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。