实战案例
这一节通过实际案例展示 JDK 新特性的应用。
案例一:数据处理管道
java
import java.util.*;
import java.util.stream.*;
public class DataPipelineDemo {
static class Product {
String name;
double price;
String category;
Product(String name, double price, String category) {
this.name = name;
this.price = price;
this.category = category;
}
@Override
public String toString() {
return name + " - " + price + " - " + category;
}
}
public static void main(String[] args) {
List<Product> products = Arrays.asList(
new Product("手机", 2999, "电子产品"),
new Product("电脑", 5999, "电子产品"),
new Product("桌子", 599, "家具"),
new Product("椅子", 299, "家具")
);
// 按类别分组,计算每组平均价格
Map<String, Double> avgByCategory = products.stream()
.collect(
Collectors.groupingBy(
p -> p.category,
Collectors.averagingDouble(p -> p.price)
)
);
System.out.println("各品类平均价格:");
avgByCategory.forEach((cat, avg) ->
System.out.println(" " + cat + ": " + avg)
);
// 找出最贵的产品
Product maxPrice = products.stream()
.max(Comparator.comparingDouble(p -> p.price))
.orElse(null);
System.out.println("\n最贵产品: " + maxPrice);
}
}案例二:并发下载器
java
import java.net.URI;
import java.net.http.*;
import java.util.*;
import java.util.concurrent.*;
public class ConcurrentDownloaderDemo {
public static void main(String[] args) throws Exception {
List<String> urls = Arrays.asList(
"https://example.com/1",
"https://example.com/2",
"https://example.com/3"
);
// 使用虚拟线程进行并发下载
try (ExecutorService executor =
Executors.newVirtualThreadPerTaskExecutor()) {
List<Future<String>> futures = new ArrayList<>();
for (String url : urls) {
futures.add(executor.submit(() -> download(url)));
}
for (Future<String> future : futures) {
System.out.println("Result: " + future.get());
}
}
}
static String download(String url) {
// 模拟下载
return "Downloaded: " + url;
}
}案例三:配置对象
java
public class ConfigRecordDemo {
// 使用 Record 替代 POJO
record Config(
String host,
int port,
String username,
String password
) {}
public static void main(String[] args) {
Config config = new Config("localhost", 8080, "admin", "123456");
// 自动生成 equals, hashCode, toString
System.out.println(config);
System.out.println("Host: " + config.host());
System.out.println("Port: " + config.port());
}
}案例四:HTTP API 调用
java
import java.net.URI;
import java.net.http.*;
public class HttpApiClientDemo {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.example.com/users"))
.header("Content-Type", "application/json")
.GET()
.build();
HttpResponse<String> response = client.send(request,
HttpResponse.BodyHandlers.ofString());
System.out.println("Status: " + response.statusCode());
System.out.println("Body: " + response.body());
}
}案例五:模式匹配简化代码
java
public class PatternMatchingDemo {
public static void main(String[] args) {
Object[] data = {42, "hello", List.of(1, 2), null, 3.14};
for (Object item : data) {
String description = switch (item) {
case Integer i -> "整数: " + i;
case String s -> "字符串: " + s;
case null -> "null 值";
default -> "其他类型: " + item.getClass().getSimpleName();
};
System.out.println(description);
}
}
}小结
JDK 新特性可以简化代码,提高可读性和性能。
选择合适的特性:
| 场景 | 推荐特性 |
|---|---|
| 日志处理 | Stream |
| 数据转换 | Lambda + Stream |
| 并发处理 | 虚拟线程 |
| 替代 POJO | Record |
