Java8是Java语言发行版的一个主要版本,Java8于2014年3月发布,引入了许多新功能和语言特性。其中,最受欢迎和最重要的之一就是Lambda表达式。
一、Lambda表达式
以前编写Java代码时,通常需要在匿名内部类中编写大量的代码来调用接口的方法。使用Lambda表达式后,可以使用一种简洁而且简单的形式编写函数式接口的实现。
// 使用匿名内部类 new Thread(new Runnable() { @Override public void run() { System.out.println("Hello World"); } }).start(); // 使用Lambda表达式 new Thread(() -> System.out.println("Hello World")).start();
Lambda表达式的语法由三部分组成:
- 参数列表
- 箭头符号(->)
- 方法体
Lambda表达式可以被用来代替函数式接口的任意实现。
二、方法引用
Java8中的方法引用是一种简洁的语法,可以用来简化Lambda表达式的实现。通常情况下,如果Lambda表达式中的代码只是对方法的调用,就可以使用方法引用。
方法引用有四种形式:
- 引用静态方法
- 引用对象的方法
- 引用自己的方法
- 引用构造函数
这里有一个全部四种情况都包含的例子:
@FunctionalInterface interface Converter{ T convert(F from); } class Something { String startsWith(String s) { return String.valueOf(s.charAt(0)); } } Something something = new Something(); Converter converter1 = something::startsWith; String converted1 = converter1.convert("Java"); System.out.println(converted1); // 输出 "J" Converter converter2 = String::valueOf; String converted2 = converter2.convert(17); System.out.println(converted2); // 输出 "17"
三、Stream API
Stream是Java8中的一个新类,它允许在集合上进行流处理。Stream API提供了很多新的方法,可以使用流来对集合进行过滤、映射和排序等操作。
下面是使用Stream API对集合进行过滤的例子:
Listnames = Arrays.asList("Fred", "Wilma", "Betty", "Barney"); names.stream() .filter(name -> name.startsWith("B")) .forEach(System.out::println);
上面的代码会输出以下内容:
Betty Barney
四、日期/时间 API
Java8中引入了新的日期/时间API。在以前的版本中,Java的日期/时间API非常难以使用,而且不够灵活。新的日期/时间API提供了一个易于使用和更加灵活的接口。
下面是创建日期对象的示例代码:
LocalDate date = LocalDate.now(); System.out.println("Today's date: " + date);
上面的代码将输出类似下面的内容:
Today's date: 2021-10-09
五、默认方法
默认方法是Java8中新增的一个语言特性,它允许在接口中定义一个带有默认实现的方法。这些方法可以由接口的所有实现类继承。
下面是一个简单的默认方法的例子:
interface Person { default void sayHello() { System.out.println("Hello!"); } } class Student implements Person {} new Student().sayHello(); // 输出 "Hello!"
在上面的例子中,Person接口定义了一个默认方法sayHello(),Student类实现了这个接口同时继承了sayHello()方法。
六、Optional类型
Java8中的Optional类型是一个容器类,可以用来表示一个值存在或不存在。这个类的主要作用是提供一种更加严格的方式来处理可能为空的值。
下面是使用Optional类型的例子:
Optionaloptional = Optional.of("Hello"); System.out.println(optional.isPresent()); // 输出 "true" System.out.println(optional.get()); // 输出 "Hello" System.out.println(optional.orElse("World")); // 输出 "Hello" optional = Optional.empty(); System.out.println(optional.isPresent()); // 输出 "false" System.out.println(optional.orElse("World")); // 输出 "World"
上面的代码中使用Optional.of()方法创建了一个非空的Optional对象。get()方法获取Optional中的值,orElse()方法在Optional为空的情况下提供默认值。
结论
Java8引入了许多新功能和语言特性,包括Lambda表达式、方法引用、Stream API、日期/时间API、默认方法和Optional类型。这些新特性让Java语言变得更加简洁、灵活和易于使用。