汇总 Java 集合、Stream API、Optional、记录类、异常处理与常用并发工具,含现代写法示例,适合 JDK 17 以上版本日常开发与代码评审时查阅。
以下示例基于 JDK 17 及以上版本。
集合
列表有序可重复,集合去重,映射存键值。工厂方法创建的是不可变集合,需要增删时要再包一层可变实现;遍历时删除元素请用迭代器的删除方法,别用普通循环边遍历边删。
List a = new ArrayList<>();
Stream API
中间操作惰性求值,遇到终止操作才真正执行;过滤、映射、收集是最常用组合,别在流里修改外部变量。大数据量可换并行流,但要留意共享状态的线程安全问题。
long c = a.stream().count();
Optional
显式表达可能为空的返回值,用映射、过滤、兜底值链式处理,替代层层判空,能明显减少空指针异常。别把它当字段或参数到处传,更适合作为方法返回值的边界约定。
Optional.of(1).orElse(0);
记录类
record 一行声明不可变数据载体,自带构造器、访问器、相等判断与字符串表示;访问字段用同名方法,不是传统的 getter。字段默认不可变,省掉大量样板代码。
record Point(int x, int y) { }
异常
受检异常必须声明或捕获;带资源的 try 会自动关闭实现自动关闭接口的资源,比手写 finally 更不容易漏掉。捕获后别只打印堆栈就了事,要么处理,要么包装后继续抛出。
throw new IOException("x");
常用并发工具
线程池用执行器服务管理,可完成的 Future 编排异步任务,并发哈希映射的合并方法是线程安全的计数写法。用完记得关闭线程池,否则进程会迟迟不退出。
pool.shutdown();