public class OrderService {
public void processOrders(List<Order> orders) {
// 在方法内部定义本地记录类
record OrderSummary(String productName, int quantity, double totalPrice) {}
List<OrderSummary> summaries = [orders.stream](<http://orders.stream>)()
.map(order -> new OrderSummary(
order.getProductName(),
order.getQuantity(),
order.getPrice() * order.getQuantity()
))
.toList();
summaries.forEach(System.out::println);
}
}
从 Java 早期版本就支持,可以在方法内部定义普通类:
public void calculateStatistics(List<Integer> numbers) {
// 本地类
class Statistics {
private int sum;
private int count;
void add(int value) {
sum += value;
count++;
}
double average() {
return count > 0 ? (double) sum / count : 0;
}
}
Statistics stats = new Statistics();
numbers.forEach(stats::add);
System.out.println("平均值: " + stats.average());
}
Java 16 也支持在方法内部定义枚举:
public void processPayment(String paymentType) {
// 本地枚举
enum PaymentMethod {
CREDIT_CARD, DEBIT_CARD, ALIPAY, WECHAT_PAY
}
PaymentMethod method = PaymentMethod.valueOf(paymentType.toUpperCase());
System.out.println("处理支付方式: " + method);
}
Java 16 引入,可以在方法内部定义接口:
public void validateData(List<String> data) {
// 本地接口
interface Validator {
boolean isValid(String value);
}
Validator emailValidator = value -> value.contains("@");
Validator lengthValidator = value -> value.length() > 5;
[data.stream](<http://data.stream>)()
.filter(emailValidator::isValid)
.filter(lengthValidator::isValid)
.forEach(System.out::println);
}
这些特性让 Java 的表达能力更强,特别适合处理复杂的数据转换和临时数据结构。