过滤器中的顺序 - 重要吗?

时间:2017-11-03 23:54:57

标签: java java-8 java-stream

让我们考虑一下我们有以下布尔条件:
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)

哪种方式更好?我的意思是效率和优雅。

2 个答案:

答案 0 :(得分:4)

就原始效率而言,组合过滤器会略好一些。但实际上对您的应用程序产生影响的情况应该非常罕见。我将其视为premature optimization

引入此类优化的成本是紧密耦合的,容易出错的代码,可以同时处理许多事情并且无法轻松测试。

如果您严格遵循Single Responsibility Principle,那么一个过滤器应该只应用一个标准。它使您的代码更加明显和可读,即使它可能花费您几纳秒。

答案 1 :(得分:1)

就效率而言,第一个例子存在轻微的缺点;将多个中间filter操作链接在一起时会创建更多对象,原因是每个filter中间操作都返回一个新流。而使用其他方法,你不会有轻微的开销。

  

哪种方式更好?我的意思是效率和优雅。

你应该选择你想要的两个中的任何一个,因为性能差异是 minimal