一、Lambda表达式
JDK8引入了函数式编程的概念。Lambda表达式可以看作是一个匿名函数。它允许我们将函数作为参数传递给另一个函数,或者直接将代码块传递给变量。以下是Lambda表达式的代码示例:
// 传统的方式 Listlist = Arrays.asList(1, 2, 3, 4, 5); for (Integer i : list) { System.out.print(i + " "); } // 使用Lambda表达式 List list = Arrays.asList(1, 2, 3, 4, 5); list.forEach((Integer i) -> System.out.print(i + " "));
可以看到,使用Lambda表达式可以使代码更加简洁,而且更易读。
二、默认方法
接口中可以定义默认方法,该方法在接口中有一个默认实现,可以在实现接口的类中重写。以下是默认方法的代码示例:
interface MyInterface { default void defaultMethod() { System.out.println("This is a default method."); } } class MyClass implements MyInterface { // 重写默认方法 public void defaultMethod() { System.out.println("This is a customized default method."); } } public class Main { public static void main(String[] args) { MyClass myClass = new MyClass(); myClass.defaultMethod(); // 输出 This is a customized default method. } }
可以看到,在MyClass中重写了接口中的默认方法,使其具有了不同的实现。
三、Stream API
Stream是Java中的一个新抽象,用于处理集合等数据结构。它提供了一种声明式的处理方式,可以轻松地并行处理集合数据。以下是Stream API的代码示例:
Listlist = Arrays.asList(1, 2, 3, 4, 5); // 使用Stream过滤出所有大于等于3的元素并输出 list.stream().filter(i -> i >= 3).forEach(System.out::println);
可以看到,使用Stream API可以在不用编写循环的情况下,快速地过滤、映射和聚合集合数据。
四、方法引用
方法引用是Lambda表达式的一种简化语法,可以直接引用已有的方法或构造函数。以下是方法引用的代码示例:
// 将字符串数组转换为整型数组 Listlist = Arrays.asList("1", "2", "3", "4", "5"); int[] arr = list.stream().mapToInt(Integer::parseInt).toArray();
可以看到,使用方法引用可以进一步简化Lambda表达式的代码。
五、Optional类
Optional是一个容器类,用于保存对象,可以防止出现NullPointerException异常。以下是Optional类的代码示例:
public class OptionalTest { public static void main(String[] args) { String str = null; OptionaloptionalStr = Optional.ofNullable(str); System.out.println(optionalStr.orElse("default")); // 输出 default } }
可以看到,使用Optional类可以使代码更加健壮,避免了因为NullPointerException而导致程序崩溃的情况。