一、Stream API
Java 8引入了Stream API,它是对迭代器模式进行改进的产物。Stream API可以让程序员以声明式方式对集合数据进行操作,从而让代码变得更加简洁易懂。以下是一个使用Stream API对List进行筛选和结合的例子:
List<String> list = Arrays.asList("apple", "banana", "orange", "pear"); String result = list.stream() .filter(fruit -> fruit.contains("a")) .map(fruit -> fruit.toUpperCase()) .collect(Collectors.joining(", ")); System.out.println(result); //APPLE, BANANA, ORANGE
此例中,filter操作筛选出含有字符"a"的水果,map将筛选出的水果名称转为大写,而collect将所有水果名称结合为一个字符串。使用Stream API可以避免使用for循环以及if语句等,代码更加简洁易读。
二、默认方法和函数式接口
在Java 8中,接口可以定义默认方法和静态方法,从而让Java的接口也拥有了一些类似于类的特性。这些特性可帮助程序员更加方便地使用Java的接口。以下是一个使用默认方法和静态方法的例子:
interface Greeting { default void sayHello() { System.out.println("Hello!"); } static void sayGoodbye() { System.out.println("Goodbye!"); } } class EnglishGreeting implements Greeting {} public static void main(String[] args) { Greeting englishGreeting = new EnglishGreeting(); englishGreeting.sayHello(); //Hello! Greeting.sayGoodbye(); //Goodbye! }
在上述例子中,Greeting接口定义了默认方法sayHello和静态方法sayGoodbye。EnglishGreeting类实现了Greeting接口,并继承了其中的默认方法。在main方法中,可以看到EnglishGreeting对象可以调用接口中的默认方法,也可以通过接口名调用静态方法。
三、Lambda表达式
Java 8引入了Lambda表达式,它是Java支持函数式编程的一个重要特性。Lambda表达式能够将一个函数作为参数传递给方法,也能够让程序员通过Lambda表达式来编写函数。以下是一个使用Lambda表达式实现函数式编程的例子:
interface Operation { void operate(int a, int b); } class Calculator { public void calculate(int a, int b, Operation operation) { operation.operate(a, b); } } public static void main(String[] args) { Calculator calculator = new Calculator(); calculator.calculate(5, 3, (a, b) -> System.out.println(a + b)); //8 }
在上述例子中,Operation是一个接口,其中只定义了一个没有实现的方法operate。Calculator类的calculate方法接收三个参数,其中第三个参数是接口Operation的一个实例。在main方法中,程序通过Lambda表达式来实现Operation接口并且传递给calculate方法。最终,程序输出a和b的和8。
四、Date/Time API
Java 8新增了一个全新的时间日期API,让程序员更好地处理日期时间相关问题。新的时间日期API对线程安全具有优化,而且设计灵活,支持时间日期的解析和格式化。以下是一个使用新的日期API实现日期加减运算的例子:
LocalDateTime now = LocalDateTime.now(); System.out.println("Current datetime: " + now); LocalDateTime future = now.plusDays(20).plusHours(3); System.out.println("Datetime after 20 days and 3 hours: " + future);
在上述例子中,程序使用LocalDateTime类来获取当前日期时间,并且调用plusDays和plusHours方法实现日期的加减运算。程序中也使用了新的日期时间API提供的格式化输出方式。
五、CompletableFuture
Java 8引入了CompletableFuture,一个可组合、响应式的异步执行机制,可以让程序员以更优美的方式编写代码来处理异步执行的任务。以下是一个使用CompletableFuture来并发处理两个异步任务的例子:
CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> { try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } return "Result1"; }); CompletableFuture<String> future2 = CompletableFuture.supplyAsync(() -> { try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } return "Result2"; }); CompletableFuture<String> future = future1.thenCombine(future2, (result1, result2) -> { System.out.println("Combining results..."); return result1 + ", " + result2; }); System.out.println(future.get()); //"Result1, Result2"
在上述例子中,程序通过CompletableFuture来实现异步执行的任务,并且在两个任务执行完成之后联合处理这些结果。程序中演示了CompletableFuture很多高级API的用法。CompletableFuture是一个十分强大的工具,能够让程序员以更简洁的方式处理异步任务。