一、Java8(JDK1.8)新特性
1、Lamdba表达式
2、函数式接口
3、方法引用和构造引用
4、Stream API
5、接口中的默认方法和静态方法
6、新时间日期API
7、OPtional
8、其他特性
二、java8(JDK1.8)新特性简介
1、速度快;
2、代码少、简介(新增特性:lamdba表达式);
3、强大的Stream API;
4、使用并行流和串行流;
5、最大化较少空指针异常Optional;
其中最为核心的是 Lambda表达式和Stream API
三、java8(JDK1.8)新特性详细介绍
一、Lambda表达式
1、Lambda表达式是什么?
Lambda是一个匿名函数,我们可以将Lambda表达式理解为一段可以传递的代码(将代码像数据一样传递)。使用它可以写出简洁、灵活的代码。作为一种更紧凑的代码风格,使java语言表达能力得到提升。
2、从匿名类到Lambda转换
package com.chen.test.JAVA8Features; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class Demo01 { private static Logger log = LoggerFactory.getLogger(Demo01.class); public static void main(String[] args) { Runnable t1 =new Runnable(){ @Override public void run(){ log.info("我是没有使用Lambda表达式:不简洁"); } }; Runnable t2 = () -> log.info("我是使用Lambda表达式:简洁、灵活"); t1.run(); t2.run(); } }
Run result
19:43:39.303 [main] INFO com.chen.test.JAVA8Features.Demo01 - 我是没有使用Lambda表达式:不简洁、代码多 19:43:39.303 [main] INFO com.chen.test.JAVA8Features.Demo01 - 我是使用Lambda表达式:简洁、灵活 Process finished with exit code 0
3、Lambda表达式语法
Lambda表达式在java语言中引入了一种新的语法元素和操作。这种操作符号为“->”,Lambda操作符或箭头操作符,它将Lambda表达式分割为两部分。 左边:指Lambda表达式的所有参数 右边:指Lambda体,即表示Lambda表达式需要执行的功能。
六种语法格式:
1、语法格式一:无参数、无返回值,只需要一个Lambda体
package com.chen.test.JAVA8Features; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class Demo02 { private static Logger log = LoggerFactory.getLogger(Demo02.class); public static void main(String[] args) { Runnable t1 = ()-> log.info("Lambda表达式:简洁、灵活,优雅永不过时"); t1.run(); } }
run result
22:22:39.125 [main] INFO com.chen.test.JAVA8Features.Demo02 - Lambda表达式:简洁、灵活,优雅永不过时 Process finished with exit code 0
2、语法格式二:lambda有一个参数、无返回值
package com.chen.test.JAVA8Features; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.function.Consumer; public class Demo03 { private static Logger log = LoggerFactory.getLogger(Demo03.class); public static void main(String[] args) { Consumer<String> consumer = new Consumer<String>() { @Override public void accept(String s) { log.info(s); } }; consumer.accept("爱与被爱的区别"); Consumer<String> consumer1 = (s) -> log.info(s); consumer1.accept("接受爱不一定爱对方,爱一定付出真心爱"); } }
run result
23:03:08.992 [main] INFO com.chen.test.JAVA8Features.Demo03 - 爱与被爱的区别 23:03:09.142 [main] INFO com.chen.test.JAVA8Features.Demo03 - 接受爱不一定爱对方,爱一定付出真心爱 Process finished with exit code 0
3、语法格式三:Lambda只有一个参数时,可以省略()
package com.chen.test.JAVA8Features; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.function.Consumer; public class Demo04 { private static Logger log = LoggerFactory.getLogger(Demo04.class); public static void main(String[] args) { Consumer<String> consumer = s -> log.info(s); consumer.accept("Lambda只有一个参数时,可以省略()"); } }
run result
23:08:27.295 [main] INFO com.chen.test.JAVA8Features.Demo04 - Lambda只有一个参数时,可以省略() Process finished with exit code 0
4、语法格式四:Lambda有两个参数时,并且有返回值
package com.chen.test.JAVA8Features; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.Comparator; public class Demo05 { private static Logger log = LoggerFactory.getLogger(Demo05.class); public static void main(String[] args) { CompareOldMethod(12,10); findMaxValue(12,10); findMinValue(12,10); } // 没有使用Lambda表达式比较大小 public static void CompareOld