Java9到11效率提升篇-集合工厂方法-var与String增强

0 阅读2分钟

前言

"很多团队升级了 JDK,代码风格却还停留在老时代。"

Java 9 到 Java 11 没有像 Java 8 那样颠覆,但它们给日常开发带来的效率提升非常直接。

这篇文章不讲大理论,只讲三个最容易落地、也最值得马上用起来的增强:集合工厂方法、var 和 String 新方法。


一、集合工厂方法:少写很多初始化样板代码

Java 9 引入了:

  • List.of()
  • Set.of()
  • Map.of()
  • Map.ofEntries()

最常见的用法:

List<String> types = List.of("TXT", "MD", "PDF", "DOCX");

Map<String, Object> request = Map.of(
    "collectionName", collectionName,
    "dimension", dimension,
    "metricType", "COSINE"
);

超过 10 个键值对时,用 Map.ofEntries()

Map<String, Integer> large = Map.ofEntries(
    Map.entry("a", 1),
    Map.entry("b", 2),
    Map.entry("c", 3)
);

这些集合有什么特点

  1. 不可变
  2. 不允许 null
  3. Map.of() 不允许重复 key
Map<String, String> map = Map.of("a", "1", "b", "2");
// map.put("c", "3");  // UnsupportedOperationException

如果后续还要改,先包装一层:

List<String> mutableList = new ArrayList<>(List.of("a", "b", "c"));
Map<String, Integer> mutableMap = new HashMap<>(Map.of("a", 1, "b", 2));

二、var:减少冗余,但别牺牲可读性

Java 10 引入了 var,本质是局部变量类型推断。

var name = "Hello";   // String
var count = 100;      // int
var list = List.of("a", "b", "c");  // List<String>

它适合什么场景?

最适合复杂泛型或右值类型已经非常清楚的场景:

var embeddingDescriptor = modelService.resolveEmbeddingModelDescriptor(modelId);

for (var chunk : retrievalResult.chunks()) {
    process(chunk);
}

不适合什么场景?

var result = process(data);

这类代码在没有上下文时可读性很差。

📌 使用建议

  • var 只能用于局部变量、增强 for、传统 for 的索引变量等局部位置
  • 它不是动态类型,编译期类型早就确定了
  • 能提高可读性时再用,而不是全量替换显式类型

三、String 新方法:都是小功能,但非常高频

Java 11 给 String 增加了不少实用方法,其中最常用的是这几个。

1. isBlank()

String str = "   ";
str.isEmpty();  // false
str.isBlank();  // true

这个方法比 isEmpty() 更适合业务输入校验。

if (payload == null || payload.isBlank()) {
    throw new BusinessException("请求体不能为空");
}

2. lines()

String text = "第一行\n第二行\n第三行";
Stream<String> lines = text.lines();

3. strip()

strip()trim() 更现代,能正确处理 Unicode 空白字符。

String unicode = "\u2000hello\u2000".strip();

4. repeat()

String separator = "-".repeat(20);

四、这些增强为什么值得你马上用

因为它们都属于“几乎没有学习成本,但长期收益很高”的能力。

对比一下:

Map<String, Object> params = new HashMap<>();
params.put("collectionName", "documents");
params.put("dimension", 1536);

写成:

Map<String, Object> params = Map.of(
    "collectionName", "documents",
    "dimension", 1536
);

不只是更短,而是语义更明确:这就是一个初始化后不再修改的只读参数对象。


总结

Java 9 到 11 这批特性最有价值的地方,不在“新”,而在“顺手”:

  1. 集合工厂方法减少初始化样板代码
  2. var 减少复杂类型声明负担
  3. String 新方法让常见文本处理更自然

如果你已经升级到较新的 JDK,这一批能力完全值得优先落地。


欢迎关注公众号 FishTech Notes,一块交流使用心得!