#Java#Java 8 到 Java 14,改变了哪些你写代码的方式?


#Java#Java 8 到 Java 14,改变了哪些你写代码的方式?
前几天 , JDK 14 正式发布了 , 这次发布的新版本一共包含了16个新的特性 。
其实 , 从Java8 到 Java14, 真正的改变了程序员写代码的方式的特性并不多 , 我们这篇文章就来看一下都有哪些 。
Lambda表达式Lambda 表达式是 Java 8 中最重要的一个新特性 , Lambda 允许把函数作为一个方法的参数 。
lambda 表达式的语法格式如下:
(parameters) -> expression



(parameters) ->{ statements;

如以下例子:
// 1. 不需要参数返回值为 5  
() -> 5  

// 2. 接收一个参数(数字类型)返回其2倍的值  
x -> 2 * x  

// 3. 接受2个参数(数字)并返回他们的差值  
(x y) -> x – y  

// 4. 接收2个int型整数返回他们的和  
(int x int y) -> x + y  

// 5. 接受一个 string 对象并在控制台打印不返回任何值(看起来像是返回void)  
(String s) -> System.out.print(s)

Lambda表达式具有简洁、容易进行并行计算、是未来的编程趋势等优点 , 但同时也会带来调试困难 , 新人理解成本高等缺点 。
Streams API除了Lambda 表达式外 , Java 8中还引入了Stream API , 这使得Java终于进入到函数式编程的行列中来了 。
Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象 。
Stream API可以极大提高Java程序员的生产力 , 让程序员写出高效率、干净、简洁的代码 。
如下图 , 就是通过Stream API对集合进行了一系列的操作:
List<String> strings = Arrays.asList(\"Hollis\" \"HollisChuang\" \"hollis\" \"Hello\" \"HelloWorld\" \"Hollis\");

Stream s = strings.stream().filter(string -> string.length()<= 6).map(String::length).sorted().limit(3).distinct();

而且 , Stream还支持并行流 , 在性能上比传统的for循环要好很多 。
从Lambda表达式和Stream API问世至今 , 已经有6年的时间了 , 相信很多人已经在工作中使用过这些特性了 。
虽然对于这两种语法的使用 , 很多人持有不同的看法 , 但是作者还是认为这个功能是十分好用的 , 只是在日常写代码的时候不要过分\"炫技\"使用超长的流式操作 , 代码可读性不要太低就可以了 。
新的日期和时间 API在Java 8之前 , 日期时间 API 存在诸多问题 , 如:Date非线程安全、java.util和java.sql的包中都有日期类、日期类并不提供国际化 , 没有时区支持 。
所以 , Java 8通过发布新的Date-Time API (JSR 310)来进一步加强对日期与时间的处理 。
新的java.time包涵盖了所有处理日期 , 时间 , 日期/时间 , 时区 , 时刻(instants) , 过程(during)与时钟(clock)的操作 。
常见操作如下:
// 获取当前的日期时间
LocalDateTime currentTime = LocalDateTime.now();
System.out.println(\"当前时间: \" + currentTime);

// 时间比较
LocalDate today = LocalDate.now();
LocalDate date1 = LocalDate.of(2014 01 14);
if(date1.equals(today)){

// 时间增加
LocalTime time = LocalTime.now();
LocalTime newTime = time.plusHours(2); // adding two hours

但是说实话 , Java8中的时间API作者日常工作中用的比较少 , 主要是有很多历史代码 , 还是依赖Date等类型 , 使用新的API就要面临互相转换问题 。