JDK8的新特性
-
Lambda表达式
Lambda表达式是JDK8中最重要的特性之一。它引入了一种新的语法,用于java中编写匿名函数,使得代码更加简洁,清晰。Lambda表达式通常用于简化集合的操作,如过滤,排序和映射等。
示例代码:
//使用Lambda表达式对一个列表进行排序 List <String> list = Arrays.asList("b","a","c"); Collections.sort(list,(s1,s2) -> s1.compareTo(s2));
Lambda表达式
(s1,s2) -> s1.compraeTo(s2)
是一个简洁的方式来实现Comparator
接口。 -
函数式接口(Functional Interfaces)
函数式接口是只有一个抽象方法的接口。JDK8提供了一些常用的函数式接口,如
java.util.function
包中的Function
,Predicate
,Consumer
等。这些接口可以和Lambda表达式一起使用,可以极大简化代码。示例代码:
@FunctionalInterface interface MyFunctionalInterface{ void myMethod(); } MyFunctionalInterface myFunc = () ->System.out.println("Hello,World"); myFunc.myMethod();
-
Stream API
Stream API是JDK 8中的另一个重大更新,它允许你以声明性方式处理数据集合。Stream支持串行和并行的聚合操作,如过滤,映射,规约等。
示例代码:
List<Interger> number = Arrays.asList(1,2,3,4,5); List<Interger> evenNumbers = number.stream() .filter(n -> n%2) .collect(Collectors.toList());
上述代码中,
filter
方法用于过滤出所有的偶数,collect
方法将结果收集为一个列表。 -
默认方法(Default Methods)
在接口中引了默认方法,允许接口提供具体实现。这使得在不破坏现有实现的情况下,可以为接口添加新方法。
示例代码:
interface MyInterface{ void existingMethod(); default void newMethod(){ System.out.println("This is a default method."); } } class MyClass implement MyInterface{ public void existingMethod(){ Systme.out.println("Existing implemetation."); } } MyClass myClass = new MyClass(); myClass.newMethod();//输出:This is a defult method.
-
Optional类
Optional
是一个容器,表示可能包含也可能不包含非空值。这可以有效避免NullPointerException
。示例代码:
Optional<String> optional = Optional.ofNullable("Hello"); optional.ifPresent(System.out::println);
-
新日期和时间API
JDK8 引入了全新的日期和时间API(
java.time
包),提供了更好的日期和时间处理功能。新的API更加直观和容易使用,同时避免了老版API中的缺陷。示例代码:
LocalDate today = LocalDate.now(); LocalDate birthDate = LocalDate.of(1990,Month.JANUARY,1); Period age = Period.between(birthDate,today); System.out.println("Age: " + age.getYears());
-
Nashorn JavaScript引擎
JDK 8引入了一个新的javaScript引擎,名为Nashorn,它允许在JVM上运行javaScript代码。
示例代码:
ScriptEngineManager manger = new ScriptEngineManger(); ScriptEngine engine = manger.gerEngineByName("nashor"); engine.eval("print('Hello from JavaScript')");
-
并发增强(Concurrent Enhancements)
JDK 8对并发API进行了增强,引入了如
CompletableFuture
类,用于编写异步程序,简化了线程的管理和异步操作。示例代码:
CompletableFnture.supplyAsync(() -> "Hello") .thenApply(result -> result + "World") .thenAccept(System.out::println);
-
Base64编码:
JDK 8在
java.util
包中提供了对Base64编码的支持,简化了对字符串的字节数组的编码和解码操作。示例代码:
String encoded=Base64.getEncoder().encodeToString("Hello".getBytes());