1. Lambda 表达式
Lambda 表达式是 Java 8 中的一个新的语言特性,可以用来简化代码。它可以用来实现函数式编程中的概念,例如函数、方法引用和 Stream API。
语法
Lambda 表达式的语法为:
(参数) -> {代码}
其中,参数
是 lambda 表达式的输入参数,代码
是 lambda 表达式的执行代码。
实例
以下是一个简单的 lambda 表达式示例:
Runnable r = () -> System.out.println("Hello, World!");
r.run(); // 输出 "Hello, World!"
在上面的示例中,我们定义了一个 lambda 表达式,它接收一个无参方法,并将其打印到控制台。
方法引用
Java 8 中还引入了方法引用,可以将一个方法转换为 lambda 表达式。
语法
方法引用语法为:
对象::方法
其中,对象
是方法所属的对象,方法
是要调用的方法。
实例
以下是一个方法引用示例:
String[] names = {"John", "Mary", "Alice"};
Arrays.sort(names, String::compareTo);
System.out.println(Arrays.toString(names)); // 输出 ["Alice", "John", "Mary"]
在上面的示例中,我们使用 String::compareTo
方法引用将字符串数组排序。
2. Stream API
Stream API 是 Java 8 中的一个新的 API,可以用来处理数据流。它提供了许多有用的函数,可以用来过滤、映射、聚合数据。
语法
Stream API 的语法为:
Stream<T> stream = Stream.of(t1, t2, ..., tn);
其中,T
是 Stream 中的元素类型,stream
是 Stream 对象。
实例
以下是一个 Stream API 示例:
List<String> names = Arrays.asList("John", "Mary", "Alice");
List<String> upperCaseNames = names.stream()
.map(String::toUpperCase)
.collect(Collectors.toList());
System.out.println(upperCaseNames); // 输出 ["JOHN", "MARY", "ALICE"]
在上面的示例中,我们使用 Stream API 将字符串列表中的每个字符串转换为大写,然后将结果收集到一个新列表中。
3. Optional 类
Optional 类是 Java 8 中的一个新的类,可以用来处理可能为空的对象。
语法
Optional 类的语法为:
Optional<T> optional = Optional.ofNullable(obj);
其中,T
是 Optional 中的元素类型,optional
是 Optional 对象,obj
是可能为空的对象。
实例
以下是一个 Optional 类示例:
String name = "John";
Optional<String> optional = Optional.ofNullable(name);
if (optional.isPresent()) {
System.out.println("Name is present: " + name);
} else {
System.out.println("Name is absent");
}
在上面的示例中,我们使用 Optional 类判断字符串是否为空,如果字符串不为空,则打印字符串,如果字符串为空,则打印 "Name is absent"。
4. Functional Programming
Functional Programming 是 Java 8 中的一个新的编程风格,可以用来简化代码。
语法
Functional Programming 的语法为:
Function<T, R> function = (t) -> { return r; };
其中,T
是函数的输入参数,R
是函数的输出结果,function
是函数对象。
实例
以下是一个 Functional Programming 示例:
Function<Integer, Integer> square = (x) -> x * x;
System.out.println(square.apply(4)); // 输出 16
在上面的示例中,我们定义了一个函数,它将输入参数平方,并将结果输出。
5. Default Methods
Default Methods 是 Java 8 中的一个新的特性,可以用来在接口中添加默认实现。
语法
Default Methods 的语法为:
public interface MyInterface {
default void myMethod() {
System.out.println("Default implementation");
}
}
其中,MyInterface
是接口对象,myMethod
是接口中的方法。
实例
以下是一个 Default Methods 示例:
public interface MyInterface {
default void myMethod() {
System.out.println("Default implementation");
}
}
public class MyClass implements MyInterface {
public static void main(String[] args) {
MyClass obj = new MyClass();
obj.myMethod(); // 输出 "Default implementation"
}
}
在上面的示例中,我们定义了一个接口 MyInterface
,并添加了一个默认方法 myMethod
。然后,我们创建了一个实现了该接口的类 MyClass
,并调用了 myMethod
方法。
6. Method References
Method References 是 Java 8 中的一个新的特性,可以用来将方法转换为 lambda 表达式。
语法
Method References 的语法为:
对象::方法
其中,对象
是方法所属的对象,方法
是要调用的方法。
实例
以下是一个 Method References 示例:
String[] names = {"John", "Mary", "Alice"};
Arrays.sort(names, String::compareTo);
System.out.println(Arrays.toString(names)); // 输出 ["Alice", "John", "Mary"]
在上面的示例中,我们使用 String::compareTo
方法引用将字符串数组排序。
7. Repeatable Annotations
Repeatable Annotations 是 Java 8 中的一个新的特性,可以用来在类、方法、变量等上添加多个注释。
语法
Repeatable Annotations 的语法为:
@Repeatable(MyAnnotation.class)
public @interface MyAnnotation {
String value();
}
其中,MyAnnotation
是注释对象,value
是注释的值。
实例
以下是一个 Repeatable Annotations 示例:
@MyAnnotation("hello")
@MyAnnotation("world")
public class MyClass {
// ...
}
在上面的示例中,我们使用 @MyAnnotation
注释将类 MyClass
标记为多个注释。
8. Type Inference
Type Inference 是 Java 8 中的一个新的特性,可以用来自动推断变量的类型。
语法
Type Inference 的语法为:
List<String> list = new ArrayList<>();
其中,list
是变量名,List<String>
是变量的类型。
实例
以下是一个 Type Inference 示例:
List<String> list = new ArrayList<>();
list.add("hello");
list.add("world");
System.out.println(list); // 输出 ["hello", "world"]