
用Optional告别空指针空指针是Java程序员的老朋友半夜报警十有八九是它。以前写if (user ! null user.getAddress() ! null)一层套一层看得人头疼。Optional把嵌套判断变成链式调用Optional.ofNullable(user).map(User::getAddress).map(Address::getCity).orElse(未知)。一行顶过去五行逻辑还更清楚。记住别用Optional.get()那等于白用老老实实orElse或者ifPresent。Stream API让集合操作像写SQL过滤、排序、分组、映射以前得写循环加临时变量现在一行Stream搞定。比如把用户列表按城市分组users.stream().collect(Collectors.groupingBy(User::getCity))。想找第一个符合条件的filter().findFirst()。注意别在Stream里搞太复杂的副作用它适合转换和聚合不适合改外部状态。用好了代码短一半可读性翻倍。Lombok省掉样板代码Getter、Setter、toString、equals、hashCode一个类写下来一半是废话。Lombok一个Data全包了。构造器用RequiredArgsConstructor日志用Slf4j再也不用写private static final Logger logger LoggerFactory.getLogger(xxx.class)。有人担心团队协作问题其实IDE装个插件就解决。省下来的时间拿去写业务逻辑不香吗。var局部变量类型推断Java 10之后可以用var声明局部变量编译器自动推断类型。var list new ArrayListString()左边不用再写一遍。有人说不利于阅读其实类型从右边一眼就看出来了反而更简洁。但注意别滥用方法返回值、成员变量不能用匿名内部类也不行。局部变量用好了代码干净不少。集合工厂方法创建不可变集合以前创建固定集合得先new再add或者用Arrays.asList但返回的是可变列表。Java 9给了List.of()、Set.of()、Map.of()直接创建不可变集合又短又安全。想改抛异常防止误操作。特别适合定义常量集合比如状态码映射、配置项列表。注意别传nullList.of(null)会直接报错。CompletableFuture玩转异步两个接口互不依赖以前得串行调用白白浪费时间。用CompletableFuture.supplyAsync并行跑thenCombine合并结果总耗时取最长的那个。比如查用户信息和查订单列表并行执行最后组装返回。异常处理用exceptionally兜底别让异步任务炸了没人管。异步写好了接口响应时间砍半不是梦。try-with-resources自动关资源流、连接、文件用完必须关忘了就泄漏。以前在finally里写close()还得判空代码又臭又长。try-with-resources把资源声明在try括号里自动关闭不用写finally。try (InputStream in new FileInputStream(file)) { ... }干净利落。实现AutoCloseable的类都能用写IO代码必备。String的实用方法别重复造轮子判断空字符串用isBlank()别写str null || str.trim().isEmpty()。拼接用join()String.join(,, list)比循环加逗号优雅得多。重复用repeat()格式化用formatted()。这些方法Java都内置了很多人不知道还在手写工具类。花半小时翻翻String源码能省以后无数行代码。技巧不在多在熟练。今天挑两三个用到项目里明天再换两个一周下来代码量少了bug也少了。别光收藏吃灰打开IDE试一把效率翻倍不是口号是实打实省下来的时间。