You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用一行代码按属性比较排序并返回Java Stream流?

一行代码实现排序并返回Stream流的方案

安全无副作用的推荐写法

可以直接通过Stream的sorted方法实现,无需修改原列表,一行代码完成:

public Stream<Actor> actors() {
    return actors.stream().sorted(Comparator.comparing(Actor::getName));
}

这种方式不会改变外部actors列表的原有顺序,避免了修改外部状态带来的潜在bug,是更稳妥的实现。

不推荐的修改原列表的一行写法

如果非要沿用原逻辑(先修改原列表再返回流),也可以合并成一行代码,但强烈不推荐——因为会修改外部状态,容易引发意料之外的问题:

public Stream<Actor> actors() {
    return (actors.sort(Comparator.comparing(Actor::getName)), actors.stream());
}

这里利用了Java的逗号表达式特性,虽然实现了一行代码,但可读性差,且核心问题(修改外部状态)依然存在。

注意:发布此问题后,我意识到该实现方案并不理想且易出错,因为它会修改方法外部的状态。感谢@knittl指出这一点。

内容的提问来源于stack exchange,提问作者riddle_me_this

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 06:50:31