jdk1.8新特性
JDK1.8新特性#
Lamdba表达式(函数式编程)#
用法#
()->{}
方法参数 方法要实现的内容
以Lambda语法创建线程和匿名内部类创建线程的区别(显然代码少了很多!):
//匿名内部类
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("hello");
}
})
//Lambda表达式,实际就是创建出该接口的实例对象
new Thread(()->{System.out.println("hello")});
-
Lambda返回的是接口的实例对象
-
有没有参数、参数有多少个、需不需要有返回值、返回值的类型是什么---->选择自己合适的函数式接口
函数式编程接口#
函数接口,是指内部只有一个抽象方法的接口
JDK原生就给我们提供了一些函数式编程接口方便我们去使用,下面是一些常用的接口:
方法引用#
如果函数式接口的实现恰好可以通过调用一个方法来实现,那么我们可以使用方法引用
分类
-
静态方法的方法引用
-
非静态方法的方法引用
-
构造函数的方法引用
stream#
是什么#
Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。
这种风格将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选, 排序,聚合等。
元素流在管道中经过中间操作(intermediate operation)的处理,最后由最终操作(terminal operation)得到前面处理的结果。
为什么用#
- 方便并发
- 代码量少(直接调用API)
如何使用#
分三步
- 创建Stream流
- 通过Stream流对象执行中间操作
- 执行最终操作,得到结果
创建流
/**
* 返回的都是流对象
* @param args
*/
public static void main(String[] args) {
List<String> list = new ArrayList<>();
// 从集合创建
Stream<String> stream = list.stream();
Stream<String> stream1 = list.parallelStream();
// 从数组创建
IntStream stream2 = Arrays.stream(new int[]{2, 3, 5});
// 创建数字流
IntStream intStream = IntStream.of(1, 2, 3);
// 使用random创建
IntStream limit = new Random().ints().limit(10);
}
执行中间操作
String str = "my name is 007";
Stream.of(str.split(" ")).filter(s->s.length()>2)
.map(s->s.length()).foreach(System.out::println);
- filter:过滤
- map:映射
- parallel:并行处理
执行最终操作
懒加载,调用了最终操作的方法,Stream才会执行
最终操作和中间操作的判断根据返回值:
中间操作返回的是Stream实例对象
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~