如何用一行代码按属性比较排序并返回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
相关产品推荐
相关产品推荐

