首页 / JAVA / Java8 新特性 -- 笔记
Java8 新特性 -- 笔记
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java8 新特性 -- 笔记,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4019字,纯文字阅读大概需要6分钟。
内容图文
![Java8 新特性 -- 笔记](/upload/InfoBanner/zyjiaocheng/626/2790b864b9bc47ed8009ea71308cb2d6.jpg)
1. Java8 优点
速度更快
2.语法
2.1 Lambda表达式
-
匿名内部类中使用的局部变量只能是final类型,不允许修改
2.2 基本语法
2.2.1 Lambda 表达式的基础语法:
-
Java8中引入了一个新的操作符 "->" 该操作符称为箭头操作符或 Lambda 操作符。箭头操作符将 Lambda 表达式拆分成两部分:
-
左侧:Lambda 表达式的参数列表
-
右侧:Lambda 表达式中所需执行的功能, 即 Lambda 体
-
-
语法格式一:无参数,无返回值
() -> System.out.println("Hello Lambda!");
-
语法格式二:有一个参数,并且无返回值
(x) -> System.out.println(x)
-
语法格式三:若只有一个参数,小括号可以省略不写
x -> System.out.println(x)
-
语法格式四:有两个以上的参数,有返回值,并且 Lambda 体中有多条语句
Comparator<Integer> com = (x, y) -> {
System.out.println("函数式接口");
return Integer.compare(x, y);
};
-
语法格式五:若 Lambda 体中只有一条语句, return 和 大括号都可以省略不写
Comparator<Integer> com = (x, y) -> Integer.compare(x, y);
-
语法格式六:Lambda 表达式的参数列表的数据类型可以省略不写,因为JVM编译器通过上下文推断出,数据类型,即“类型推断”
(Integer x, Integer y) -> Integer.compare(x, y);
总结:
-
上联:左右遇一括号省
-
下联:左侧推断类型省
-
横批:能省则省
2.2.2 Lambda 表达式需要“函数式接口”的支持
-
函数式接口:接口中只有一个抽象方法的接口,称为函数式接口。 可以使用注解 @FunctionalInterface 修饰
-
可以检查是否是函数式接口
2.2.3 Java8 内置的四大核心函数式接口
-
Consumer<T> : 消费型接口
void accept(T t);
需求:用于输出
-
Supplier<T> : 供给型接口
T get();
需求:产生指定个数的整数,并放入集合中
-
Function<T, R> : 函数型接口
R apply(T t);
需求:用于处理字符串
-
Predicate<T> : 断言型接口:
boolean test(T t);
需求:将满足条件的字符串,放入集合中
2.3 方法引用和构造器引用
2.3.1 方法引用
-
方法引用:若 Lambda 体中的功能,已经有方法提供了实现,可以使用方法引用(可以将方法引用理解为 Lambda 表达式的另外一种表现形式)
-
对象的引用 :: 实例方法名
-
-
类名 :: 静态方法名
-
-
类名 :: 实例方法名
-
-
注意:
-
①方法引用所引用的方法的参数列表与返回值类型,需要与函数式接口中抽象方法的参数列表和返回值类型保持一致!
-
②若Lambda 的参数列表的第一个参数,是实例方法的调用者,第二个参数(或无参)是实例方法的参数时,格式: ClassName::MethodName
2.3.2 构造器引用
-
构造器引用 :构造器的参数列表,需要与函数式接口中参数列表保持一致!
-
类名 :: new
2.3.3 数组引用
-
类型[] :: new;
3. Stream
3.1 原理定义
流是数据渠道,用于操作数据源(集合,数组等)所产生的元素序列。集合讲的是数据,流讲的是计算!
注意:
-
Stream 自己不会存储元素;
-
Stream不会改变源对象。相反,他们会返回一个持有结果的新Stream.
-
Stream操作是延迟执行的。这意味着他们会等到需要结果的时候执行。
3.2 Stream 操作流程
-
创建Stream
一个数据源(如:集合,数组),获取一个流
-
中间操作
一个中间操作链,对数据源的数据进行处理
-
终止操作(终端操作)
一个终止操作,执行中间操作链,并产生结果
3.3 各步骤实现方法
3.1 创建Stream
-
Collection 提供了两个方法 stream() 与 parallelStream()
-
通过 Arrays 中的 stream() 获取一个数组流
-
通过 Stream 类中静态方法 of()
-
创建无限流
-
迭代
-
生成
-
3.2 中间操作
-
多个中间操作可以连接起来形成一个流水线,除非流水线上出发终止操作,否则中间操作不会执行任何的处理!而在终止操作时一次性全部处理,称为“惰性求值”。
-
筛选与切片 filter——接收 Lambda , 从流中排除某些元素。 limit——截断流,使其元素不超过给定数量。 skip(n) —— 跳过元素,返回一个扔掉了前 n 个元素的流。若流中元素不足 n 个,则返回一个空流。与 limit(n) 互补 distinct——筛选,通过流所生成元素的 hashCode() 和 equals() 去除重复元素
-
映射 map——接收 Lambda , 将元素转换成其他形式或提取信息。接收一个函数作为参数,该函数会被应用到每个元素上,并将其映射成一个新的元素。 flatMap——接收一个函数作为参数,将流中的每个值都换成另一个流,然后把所有流连接成一个流
-
sorted()——自然排序 sorted(Comparator com)——定制排序
3.3 终止操作
-
常见方法
allMatch——检查是否匹配所有元素 anyMatch——检查是否至少匹配一个元素 noneMatch——检查是否没有匹配的元素 findFirst——返回第一个元素 findAny——返回当前流中的任意元素 count——返回流中元素的总个数 max——返回流中最大值 min——返回流中最小值
注意:流进行了终止操作后,不能再次使用*
-
归约 reduce(T identity, BinaryOperator) / reduce(BinaryOperator) ——可以将流中元素反复结合起来,得到一个值。
-
collect——将流转换为其他形式。接收一个 Collector接口的实现,用于给Stream中元素做汇总的方法
-
分组 / 多级分组 / 分区
内容总结
以上是互联网集市为您收集整理的Java8 新特性 -- 笔记全部内容,希望文章能够帮你解决Java8 新特性 -- 笔记所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。