人生苦短,JAVA8提高效率的新特性

JAVA8新功能

主要包含:

  • Lambda 表达式 、方法引用、函数式接口和 默认方法。

最大改进是 在java语言和平台支持Lambda 表达式。

  • 日期和时间API

新的api使开发者用更自然,清楚,简单的方式处理日期和时间。

  • Nashhorn JavaScript 引擎

新的轻量级,高性能JavaScript引擎

1. Lambda 表达式

用过其它常用语言(scala .net等)的开发者,应该比较熟悉Lambda表达式,在Java语言中Lambda就是一个匿名方法,匿名方法没有名称 标识,只在需要的时候创建,经常作为其他方法的参数。

Lambda基本格式是

(parameters) -> expression
或者
(parameters) -> { statements; }
或者
() -> expression
或者
x-> expression

典型例子:

(x, y) -> x + y //返回 x加上y的值
(String s) -> System.out.print(s) // 接受一个 string 对象,并在控制台打印

2. 函数式接口

函数式接口是指 只有一个抽象方法的接口或者类, 批注@FunctionalInterface表示这个是一个函数式接口,如果没有满足上面条件,编译器会报错。

例子:

@FunctionalInterface
public interface MyFirstFunctionalInterface{
void method();
}

java.util.function 类库下面 增加了很多函数式接口类

  • 后缀是Predicate 表示只有一个输入 返回时boolean类型函数式接口。
  • Function 接收一个参数 返回一个结果
  • Supplier 没有参数 返回一个结果
  • Consumer 有一个参数,没有结果
  • 已Bi开头表示有两个参数的函数式

3.默认方法

java8为了支持lambda 表达式兼容旧代码,可以在接口里面定义默认方法并且有body实现.

默认方法有点违反接口的定义原则。接口里面混入实现代码。

例子:

public interface Moveable {
default void move(){
System.out.println("I am moving....");
}
}

4.Stream

Stream提供一种机制来操作一个数据集。

操作包括 过滤 排序 映射 收集 转换等, filter sort map distinct limit count collect summaryStatistics...

数据集来源:可以是集合 、数组、IO Channel、generator 产生器等。

Stream通过管道串联在一起,通过访问者模式实现对每一个元素操作

例子:

List<string>strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
// 获取空字符串的数量
int count = strings.stream().filter(string -> string.isEmpty()).count();
/<string>

parallelStream 可以返回并行流,很容易实现并发操作。

5.日期时间api

新增 java.time类库,旧的Date不是线程安全、结构混乱等已经舍弃。新增三个时间类 LocalDate, LocalTime and LocalDateTime.

例子:

LocalDateTime currentTime = LocalDateTime.now();//默认时区
System.out.println("当前时间: " + currentTime);

谈论日期必须带上时区否则就是耍流氓。时间戳不需要时区。

Timestamp Duration 和 Instant 持续时间 。

例子

Instant instant = Instant.now();
Instant instant1 = instant.plus(Duration.ofMillis(1000));
Duration duration = Duration.ofMillis(5000);
duration = Duration.ofMinutes(10);

JAVA8的这些新特性有提高你的生产力吗?

更多资源请参考jdk文档


分享到:


相關文章: