【java8、9、10、11新特性】简单 聊聊Java8,9,10,11新特性

285 阅读3分钟

(java8、9、10、11新特性)

一、Java8

1.Lambda表达式

Lambda是一个匿名函数,类似一段可以传递的代码,简洁灵活

  • “->”称为Lambda操作符或箭头操作符:
  • 左侧:指定Lambda表达式需要的参数
  • 右侧:指定Lambda体,是抽象方法的实现逻辑,即要实现的具体功能

语法格式

1.无参无返回值:()->{System.out.print("lala");}; 2.一个参数,无返回值:(String str)->{System.out.priont();}; 3.数据类型可省略(编译器推断得出),类型推断:(str)->{System.out.print();}; 4.一个参数时,括号可以省略:str->{System.out.print();}; 5.多个参数,多条语句,可以有返回值:(x,y)->{System....;return Integer.compare(x,y);}; 6.Lambda体只有一条语句,return与大括号可省略:(x,y)->Integer(x,y);

类型推断 Lambda表达式无需指定类型,因为javac根据程序上下文,在后台推断出了参数类型。(由编译器推断)

2.函数式(Functional)接口

只包含一个抽象方法的接口 需要在一个接口上使用@FunctionalInterface注解,可以检查是否函数式接口,且Javadoc也会声明是一个函数式接口 Lambda表达式是对象,不是函数,需要依附特别的对象--函数式接口

以前匿名实现类现在都可以用Lambda表达式书写

3.方法引用与构造器引用

使用“::”将类与方法名分隔开 对象::实例方法名 类::静态方法名 类::实例方法名

//方法引用
Comparator<Integer> com = (x,y)->Integer.compare(x,y);
||
Comparator<Integer> com2 = Integer::compare;
//构造器引用ClassName::new
Function fun = (n)->new MyClass(n);
||
Function fun2 = MyClass::new;
//数组引用type[]::new
function fun = (n)->new Integer[n];
||
function fun2 = Integer[]::new

4.强大的Stream API

Collection是静态的内存数据,Stream是有关计算的。 Stream是数据渠道,用于操作数据源所生成的元素序列 特点

  • Stream自己不会存储元素
  • 不会改变源对象
  • 是延迟操作,意为他们等到需要结果时候才执行

步骤 创建Stream,中间操作,终止操作

创建流 1.Collection获取:

  • stream():返回顺序流
  • parallelStream():返回并行流

2.数组获取: stream(T[] array):返回一个流 3.通过Stream的of方法 4.创建无限流Stream.iterate和Stream.generate()

方法 中间:筛选切片、映射、排序 终止操作:匹配查找、归约、收集

1.生成Stream流的三种方式

  • collection体系集合

    使用默认方法stream()生成流,default Stream stream()

  • Map 体系集合

    把Map转成Set集合,间接的生成流

  • 数组

    通过Stream接口的静态方法of(T... values)生成流

3.Stream流中间操作方法

说明
filter对数据进行过滤
limit截取前指定参数个数据,返回流
skip跳过指定参数个数返回流
concat合并a和b两个流为一个流
distinct返回不同流组成的流
sorted自然顺序排列
sorted(Comparator comparator)根据提供的Comparator进行排序
map返回流
mapToInt返回一个IntStream元素流

4.Stream流终结操作方法

执行完此方法,Stream流不再执行其他操作

方法说明
forEach对流的每个元素执行操作
count返回此流的元素个数

5.Stream流的收集操作

方法说明
collect把结果收集到集合中
static Collector toList()把元素收集到List集合中
static Collector toSet()把元素收集到Set集合
static Collector toMap(keyMapper,valueMapper)把元素收集到Map集合

5.Optional类

这是一个容器类,可以保存类型T的值,T可以使任意的,包括null。 在这里插入图片描述

二、Java9

模块化系统Jigsaw

  • exports:控制着哪些包可以被其他模块访问到。所有不被导出的包默认封装在模块里面(在需要被用的src下module-info.java)
  • requires:指明对其他模块的依赖(在使用的模块src下module-info.java声明)

jShell命令

  • 即写即得!快速运行!

接口私有方法

三、Java10

局部变量类型推断 集合新增创建不可变集合的方法 of、copyOf

四、Java11

ZGC:并发、压缩型的垃圾收集器 新增字符串处理 Optiona增强 HTTP客户端API ...

由于JDK免费版本停留在JDK8,所以后面的作以了解,重点谈下JDK8.0新特性!