沉默是金,总会发光
大家好,我是沉默
“代码是写给人看的,顺便能在机器上跑。”——某位逐渐秃顶但功力深厚的程序员
你还记得第一次翻 JDK 源码时的感觉吗?
那种感觉很奇妙
明明每个字你都认识,但连在一起却像武林秘籍。
就像刘姥姥进了大观园,一边眼花缭乱,一边疯狂怀疑人生:
“原来代码……还能这么写?!”
那一刻你才意识到:
**
**
原来程序员之间的差距,不只是“会不会写”,而是“写得好不好看”。
今天这篇文章,不教你造轮子,也不背八股。
只聊一件事:
那些让我这个写了多年 Java 的人,真正“顿悟”的代码写法。
**-**01-
1-2
一、Lambda:换了一种思考方式
如果你经历过 Java 8 之前的年代,一定对这种代码不陌生:
newThread(newRunnable() {
@Override
public void run() {
System.out.println("Hello from a thread");
}
}).start();
Lambda 版本时:
newThread(() -> System.out.println(
"Hello from a thread")).start();
Lambda 真正厉害的不是“短”,而是“抽象层次变了” 。
从「怎么做」 → 「做什么」
再看一个集合操作的例子:
// 传统写法:命令式
List<String> names = newArrayList<>();
for (User user : users) {
if (user.getAge() > 18) {
names.add(user.getName());
}
}
Lambda + Stream 版本:
List<String> names = users.stream()
.filter(user -> user.getAge() > 18)
.map(User::getName)
.collect(Collectors.toList());
你有没有发现一件事?
这段代码,已经接近“自然语言”了。
“过滤年龄大于 18 的用户 → 映射成名字 → 收集成列表”
这不是写给 JVM 的,是写给下一个接手你代码的人的。
二、Stream API:“业务逻辑”变成流水线
Stream API 是我心目中 Java 8 最成功的设计之一。
看一个真实业务场景:
统计订单
- 排除已取消订单
- 按用户分组
- 汇总每个用户的订单金额
Map<Long, Double> userOrderTotals = orders.stream()
.filter(o -> o.getStatus() != OrderStatus.CANCELLED)
.collect(Collectors.groupingBy(
Order::getUserId,
Collectors.summingDouble(Order::getTotalAmount)
));
如果用传统写法:
- 至少 20 行
- 3 层循环
- 2 个 Map
- debug 一次掉半条命
还有一个案例:惰性求值
Stream<Integer> stream = Stream.of(1, 2, 3)
.peek(System.out::println);// 什么都不会发生
stream.count(); // 这一步才真正执行
Stream 的哲学很简单:
“不到最后一刻,绝不动手。”
正是这种“懒”,才让它能做:
- 操作合并
- 短路求值
- 性能优化
这不是偷懒,这是工程设计的智慧。
- 02-
3-4
三、Optional:让 Null 无处遁形
NullPointerException 是 Java 程序员的成人礼。
传统写法像极了俄罗斯套娃:
if (user != null) {
Address address= user.getAddress();
if (address != null) {
String city= address.getCity();
if (city != null) {
return city.toUpperCase();
}
}
}
return"UNKNOWN";
Optional 版本:
return Optional.ofNullable(user)
.map(User::getAddress)
.map(Address::getCity)
.map(String::toUpperCase)
.orElse("UNKNOWN");
Optional 最狠的一点是:
它强迫你“正视 null”,而不是假装它不存在。
还有它的链式调用:
Optional<User> result = users.stream()
.filter(u -> u.getAge() > 25)
.findFirst()
.flatMap(this::findManager)
.filter(m -> "IT".equals(m.getDepartment()))
.map(Manager::getAssistant);
读代码的人,不用猜,全在“明牌”里。
四、策略模式:一刀砍死 if-else 地狱
传统写法(噩梦)
if ("VIP".equals(type)) {
return price * 0.8;
} else if ("MEMBER".equals(type)) {
return price * 0.9;
} else if ("NEW".equals(type)) {
return price * 0.95;
}
return price;
每加一个需求,你都要回来改这坨代码。
策略模式:把变化“关进笼子里”
public interface DiscountStrategy {
double calculate(double price);
}
@Service
public class DiscountContext {
private final Map<String, DiscountStrategy> strategies;
public DiscountContext(List<DiscountStrategy> list) {
this.strategies = list.stream() .collect(Collectors.toMap(s -> s.getClass()
.getSimpleName() .replace("Strategy", "") .toLowerCase(), Function.identity()
));
}
public double calculatePrice(String type, double price) {
return Optional.ofNullable(strategies.get(type)) .map(s -> s.calculate(price)) .orElse(price);
}}
新增策略 = 新建一个类
原有代码,一行不动。
这就是架构的底气。
- 03-
5-6
五、并发编程:从“能跑”到“优雅”
CompletableFuture:真正的异步
CompletableFuture.supplyAsync(this::fetchData)
.thenApply(this::process)
.thenCompose(this::save)
.exceptionally(e -> "默认值")
.thenAccept(System.out::println);
没有 get()
没有阻塞
逻辑一条线
并发容器:
map.compute("key", (k, v) -> v == null ? 1 : v + 1);
CopyOnWriteArrayList<String> list = newCopyOnWriteArrayList<>();
这些类背后,都是血与泪换来的设计经验。
六、函数式编程:把“行为”当成参数
public <T> List<T> filter(List<T> list, Predicate<T> predicate) {
return list.stream().filter(predicate).toList();
}
filter(names, n -> n.length() > 5);
filter(numbers, n -> n % 2 == 0);
你传的不是数据,是“规则”。
**-****04-**总结
真正让人“哇塞”的代码长什么样?
真正让人“哇塞”的代码长什么样?
不是炫技,而是表达力
validator.validate(user)
.onSuccess(repository::save)
.onSuccess(emailService::sendWelcomeEmail)
.onSuccess(logService::logUserRegistration);
try-with-resources:成熟工程师的标配
try (Resourcer1= open1();
Resourcer2= open2()) {
// 业务逻辑
}
代码,其实是一种修行
看完这些代码,你可能会说一句:
“原来代码还能这么写。”
但真正重要的不是“会用 API”,而是你是否开始思考:
-
这段代码半年后还能看懂吗?
-
新同事接手会骂你吗?
-
它是在“堆功能”,还是“讲逻辑”?
最后送你一句我很喜欢的话:
代码不是写给机器看的,是写给下一个维护你的人看的。
而那个人,很可能就是未来的你。
**-****05-**粉丝福利
我这里创建一个程序员成长&副业交流群,
和一群志同道合的小伙伴,一起聚焦自身发展,
可以聊:
技术成长与职业规划,分享路线图、面试经验和效率工具,
探讨多种副业变现路径,从写作课程到私活接单,
主题活动、打卡挑战和项目组队,让志同道合的伙伴互帮互助、共同进步。
如果你对这个特别的群,感兴趣的,
可以加一下, 微信通过后会拉你入群,
但是任何人在群里打任何广告,都会被我T掉。