编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

JDK8新特性

wxchong 2024-06-08 22:57:24 开源技术 27 ℃ 0 评论

JDK8(Java Development Kit 8)是 Java 开发工具包的一个重要版本。它带来了许多显著的变化和改进,和新特性外,还对性能进行了优化,进一步增强了 Java 语言的功能和表现力,为开发者提供了更多便捷高效的编程方式,对 Java 的发展产生了深远的影响。下面简单介绍下常用的几个jdk8的新特性。

1.Lambda表达式

创建一个新的线程,指定线程要执行的任务

1.代码分析:

1.Thread类需要一个Runnable接口作为参数,其中的抽象方法run方法是用来指定线程任务内容的核心

2.为了指定run方法体,不得不需要Runnable的实现类

3.为了省去定义一个Runnable 的实现类,不得不使用匿名内部类

4.必须覆盖重写抽象的run方法,所有的方法名称,方法参数,方法返回值不得不都重写一遍,而且不能出错,其中最关键就是run方法中的具体实现业务。

2.Lambda表达式的优点

1.简化了匿名内部类的使用,语法更加简单的语法糖。

2.匿名内部类语法冗余,体验了Lambda表达式后,发现Lambda表达式是简化匿名内部类的一种方式。

3.Lambda省去了面向对象的条条框框,Lambda的标准格式由3个部分组成

(参数类型 参数名称) -> { 代码体; }

2.Optional类

Optional类是 JDK8 引入的一个用于处理可能为空对象的容器类


它的主要优点包括:

  1. 明确表达空值处理意图:使代码更清晰地表明对可能为空情况的处理方式。
  2. 提供简洁的操作方法:如orElse()、orElseGet()、ifPresent()等,方便进行不同情况下的处理。
  3. 通过使用Optional,可以减少空指针异常的潜在风险,提高代码的健壮性和可读性

3.Stream API

当我们在需要对集合中的元素进行操作的时候,除了必需的添加,删除,获取外,最典型的操作就是集合遍历,

1.数据过滤和筛选

假设你有一个员工列表,要找出特定条件的员工

2.数据转换

比如将对象的某个属性提取或进行计算后形成新的列表。


3.数据聚合

计算一些统计信息。


4.多条件排序


5.数据分组


注意:Stream和IO流(InputStream/OutputStream)没有任何关系,请暂时忘记对传统IO流的固有印象! Stream流式思想类似于工厂车间的“生产流水线”,Stream流不是一种数据结构,不保存数据,而是对数据进行加工 处理。Stream可以看作是流水线上的一个工序。在流水线上,通过多个工序让一个原材料加工成一个商品。


Stream API能让我们快速完成许多复杂的操作,如筛选、切片、映射、查找、去除重复,统计,匹配和归约。

4.函数式接口

在 Java 中,函数式接口是指只包含一个抽象方法的接口。

一些常见的函数式接口示例包括:

  • java.util.function.Consumer<T>:接受一个参数,不返回值。
  • java.util.function.Function<T, R>:接受一个类型为 T 的参数,返回一个类型为 R 的值。
  • java.util.function.Predicate<T>:接受一个参数,返回一个布尔值。


创建函数式接口:





1.Predicate 接口

Predicate<T>是一个函数式接口。它主要有一个方法test(T t),用于对给定的参数进行某种条件判断并返回一个布尔值。 它在集合的过滤等操作中经常被使用




2.Function接口

Function<T, R> 是一个函数式接口,其中 T 是输入类型,R 是输出类型。它主要有一个方法 apply(T t) ,用于将输入的 T 类型数据转换为 R 类型数据







3.Consumer接口

Consumer是 Java 中的一个函数式接口。它定义了一个方法accept,用于接收一个参数并执行相应的操作,但不返回任何值。它常用于执行一些对数据的消费行为,比如对集合中的元素进行某种处理或执行一些副作用操作




使用函数式接口可以方便地与 Lambda 表达式结合使用,使得代码更加简洁和灵活。例如,可以将一个 Lambda 表达式作为参数传递给一个方法,该方法期望一个符合特定函数式接口定义的对象。这样可以更简洁地表达一些特定的行为或操作。

总结: 还有很多新的特性 和使用方式,具体的需要大家自行去了解学习。一起进步!

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表