王磊的个人技术记录 王磊的个人技术记录

记录精彩的程序人生

目录
jvm7 Java 语法糖及实现
/  

jvm7 Java 语法糖及实现

Java 中的泛型

泛型是什么

泛型,即“参数化类型”,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。

引入一个类型变量 T(其他大写字母都可以,不过常用的就是 T,E,K,V 等等),并且用<>括起来,并放在类名的后面。泛型类

是允许有多个类型变量的。

按照约定,类型参数名称命名为单个大写字母,以便可以在使用普通类或接口名称时能够容易地区分类型参数。以下是常用的类

型参数名称列表:

 E - 元素,主要由 Java 集合(Collections)框架使用。

 K - 键,主要用于表示映射中的键的参数类型。

 V - 值,主要用于表示映射中的值的参数类型。

 N - 数字,主要用于表示数字。

 T - 类型,主要用于表示第一类通用型参数。

 S - 类型,主要用于表示第二类通用类型参数。

 U - 类型,主要用于表示第三类通用类型参数。

 V - 类型,主要用于表示第四个通用类型参数

泛型类和泛型接口

可以为任何类、接口增加泛型声明

image.png

泛型接口与泛型类的定义基本相同

image.png

Stream

什么是 Stream?

Java8 中,Collection 新增了两个流方法,分别是 Stream() 和 parallelStream()

Java8 中添加了一个新的接口类 Stream,相当于高级版的 Iterator,它可以通过 Lambda 表达式对集合进行大批量数据操作,或

者各种非常便利、高效的聚合数据操作。

为什么要使用 Stream?

在 Java8 之前,我们通常是通过 for 循环或者 Iterator 迭代来重新排序合并数据,又或者通过重新定义 Collections.sorts 的

Comparator 方法来实现,这两种方式对于大数据量系统来说,效率并不是很理想。Stream 的聚合操作与数据库 SQL 的聚合操作 sorted、filter、map 等类似。我们在应用层就可以高效地实现类似数据库 SQL 的

聚合操作了,而在数据操作方面,Stream 不仅可以通过串行的方式实现数据操作,还可以通过并行的方式处理大批量数据,提高数据

的处理效率。

Stream 操作分类

官方将 Stream 中的操作分为两大类:终结操作(Terminal operations)和中间操作(Intermediate operations)。

中间操作会返回一个新的流,一个流可以后面跟随零个或多个中间操作。其目的主要是打开流,做出某种程度的数据映射/过滤,

然后会返回一个新的流,交给下一个操作使用。这类操作都是惰性化的(lazy),就是说,仅仅调用到这类方法,并没有真正开始流的

遍历。而是在终结操作开始的时候才真正开始执行。

中间操作又可以分为无状态(Stateless)与有状态(Stateful)操作,无状态是指元素的处理不受之前元素的影响,有状态是指该

操作只有拿到所有元素之后才能继续下去。

终结操作是指返回最终的结果。一个流只能有一个终结操作,当这个操作执行后,这个流就被使用“光”了,无法再被操作。所以

这必定这个流的最后一个操作。终结操作的执行才会真正开始流的遍历,并且会生成一个结果。

终结操作又可以分为短路(Short-circuiting)与非短路(Unshort-circuiting)操作,

短路是指遇到某些符合条件的元素就可以得到最终结果,

非短路是指必须处理完所有元素才能得到最终结果。操作分类详情如下图所示

image.png


标题:jvm7 Java 语法糖及实现
作者:wanglei03
地址:https://wangleijava.com/articles/2020/10/26/1603718394704.html