Java基础知识(8)-- Java8新特性

https://juejin.im/post/5cd97ccb518825686b1209ea

https://www.jianshu.com/p/15c90dacf134

1、lambda表达式

在Java8中引入了一个新的操作符“->”,该操作符称为箭头操作符或Lambda操作符,左侧:Lambda表示式的参数列表,右侧:Lambda表达式中所要执行的功能,即把函数作为一个方法的参数,通常多用于匿名内部类的简洁写法,同时lambda表达式也是更好的使用StreamAPI的基础。

变量作用域:lambda 表达式只能引用 final 或 final 局部变量,这就是说不能在 lambda 内部修改定义在域外的变量,否则会编译错误。

2、函数式接口

Lambda的设计者们为了让现有的功能与Lambda表达式良好兼容,考虑了很多方法,于是产生了函数接口这个概念。

函数式接口(Functional Interface)就是只具有一个抽象方法的普通接口

在实践中,函数式接口非常脆弱:只要某个开发者在该接口中添加一个函数,则该接口就不再是函数式接口进而导致编译失败。为了克服这种代码层面的脆弱性,并显式说明某个接口是函数式接口,Java 8 提供了一个特殊的注解@FunctionalInterface

@FunctionalInterface

public interface Functional{

void method();

}

需要注意,默认方法和静态方法不会破坏函数式接口的定义。

3、默认方法和静态方法

Java 8使用两个新概念扩展了接口的含义:默认方法和静态方法。

简单说,默认方法就是接口可以有实现方法,而且不需要实现类去实现其方法。

我们只需在方法名前面加个default关键字即可实现默认方法。

4、方法引用

方法引用是lambda表达式的一种特殊形式,如果正好有某个方法满足一个lambda表达式的形式,那就可以将这个lambda表达式用方法引用的方式表示,但是如果这个lambda表达式的比较复杂就不能用方法引用进行替换。实际上方法引用是lambda表达式的一种语法糖。方法引用的实质就是使用更简单的方式代替Lambda表达式。

在介绍方法引用使用方式之前,先将方法引用分下类

方法引用共分为四类:

1.类名::静态方法名

2.对象::实例方法名

3.类名::实例方法名 

4.类名::new

5、Stream API

可以把Stream当成一个高级版本的Iterator。原始版本的Iterator,用户只能一个一个的遍历元素并对其执行某些操作;高级版本的Stream,用户只要给出需要对其包含的元素执行什么操作,比如“过滤掉长度大于10的字符串”、“获取每个字符串的首字母”等,具体这些操作如何应用到每个元素上,就给Stream就好了!

Stream使用方法:

创建Stream:一个数据源(集合、数组)获取一个流

中间操作:一个中间操作链,对数据源的数据进行处理

终止操作:一个终止操作,执行中间操作链,并产生结果。

6、LocalDateTime

LocalDateTime是一个不可变的日期时间对象,代表日期时间,通常被视为年 - 月 - 日 - 时 - 分 - 秒。这个也是在开发中使用的最多的,例如统计数据的时候根据时间分组后,统计当前季度或者下一季度的,或者获取当前年月,再例如获取当前月的第一天,当前月的最后的一天,下两个月的最后一天等等,使用LocalDateTime都可以很简单的完成。

7、Optional

这个也可以说是一大神器啦,排除空指针异常呀,有时候自己写的你还能注意点盼空,随着微服务的使用,调用其他系统接口,你也不完全知道别人会给你返回个人什么呀,之前我们可以使用三木运算判空或者if判空,现在可以使用Optional更加优雅的消除空指针。

8、Base64

这个虽然没有之前的新特性用的多,但是在最近的项目开发中使用带了,就顺便记录一下吧

String text = "show me the code";

String encoded = Base64.getEncoder().encodeToString(text.getBytes(StandardCharsets.UTF_8));

String decoded = new String(Base64.getDecoder().decode(encoded), StandardCharsets.UTF_8);

你可能感兴趣的:(Java基础知识(8)-- Java8新特性)