让我们考虑一下我们有以下布尔条件:
A,B,C,D
。
现在我们想根据它们过滤清单:
list.stream().filter(x -> A).filter(x -> B).filter(x -> C).filter(x -> D)
list.stream().filter(x -> A && B && C && D)
哪种方式更好?我的意思是效率和优雅。
答案 0 :(得分:4)
就原始效率而言,组合过滤器会略好一些。但实际上对您的应用程序产生影响的情况应该非常罕见。我将其视为premature optimization。
引入此类优化的成本是紧密耦合的,容易出错的代码,可以同时处理许多事情并且无法轻松测试。
如果您严格遵循Single Responsibility Principle,那么一个过滤器应该只应用一个标准。它使您的代码更加明显和可读,即使它可能花费您几纳秒。
答案 1 :(得分:1)
就效率而言,第一个例子存在轻微的缺点;将多个中间filter
操作链接在一起时会创建更多对象,原因是每个filter
中间操作都返回一个新流。而使用其他方法,你不会有轻微的开销。
哪种方式更好?我的意思是效率和优雅。
你应该选择你想要的两个中的任何一个,因为性能差异是 minimal 。