Java新特性概览:现代Java的演进
Java新特性概览:现代Java的演进
概述
Java从8开始引入了许多现代特性,包括Lambda表达式、Stream API、Optional类等。这些特性让Java代码更加简洁、易读和函数式。
1. Lambda表达式
import java.util.*;
public class LambdaDemo {
public static void main(String[] args) {
List<String> languages = Arrays.asList("Java", "Python", "C++", "JavaScript");
// Lambda写法
languages.sort((a, b) -> a.compareTo(b));
// 方法引用
languages.sort(String::compareTo);
// 遍历
languages.forEach(lang -> System.out.println(lang));
}
}
2. Stream API
import java.util.*;
import java.util.stream.*;
public class StreamDemo {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
// 过滤、转换、收集
List<Integer> result = numbers.stream()
.filter(n -> n % 2 == 0)
.map(n -> n * 2)
.collect(Collectors.toList());
System.out.println(result); // [4, 8, 12, 16, 20]
// 聚合操作
int sum = numbers.stream()
.filter(n -> n > 5)
.mapToInt(Integer::intValue)
.sum();
System.out.println("Sum: " + sum);
// 分组
Map<Boolean, List<Integer>> grouped = numbers.stream()
.collect(Collectors.partitioningBy(n -> n % 2 == 0));
}
}
3. Optional类
import java.util.Optional;
public class OptionalDemo {
public static void main(String[] args) {
Optional<String> optional = Optional.of("Hello");
optional.ifPresent(value -> System.out.println(value));
String value = optional.orElse("Default");
Optional<Integer> length = optional
.map(String::length)
.filter(len -> len > 3);
System.out.println(length.orElse(0));
}
}
4. var局部变量
public class VarDemo {
public static void main(String[] args) {
var name = "Hello";
var number = 42;
var decimal = 3.14;
var list = new ArrayList<String>();
System.out.println(name);
System.out.println(number);
}
}
5. Record类
public record Point(int x, int y) {
}
public record User(String name, String email, int age) {
public boolean isAdult() {
return age >= 18;
}
}
public class RecordDemo {
public static void main(String[] args) {
Point point = new Point(10, 20);
System.out.println(point.x());
User user = new User("John", "john@example.com", 25);
System.out.println(user.isAdult());
}
}
6. switch表达式
public class SwitchDemo {
public static void main(String[] args) {
String day = "MONDAY";
String type = switch (day) {
case "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY" -> "工作日";
case "SATURDAY", "SUNDAY" -> "周末";
default -> "未知";
};
System.out.println(day + "是" + type);
}
}
最佳实践
- 使用Lambda:简化匿名类
- 使用Stream:函数式数据处理
- 使用Optional:避免NullPointerException
- 使用var:简化局部变量声明
- 使用Record:定义不可变数据类
总结
Java新特性让语言更加现代化和简洁,掌握Lambda、Stream、Optional等特性,可以编写出更加优雅和高效的代码。