我刚开始玩 Java 8 lambda,我正在尝试用函数式语言实现一些我习惯的东西。
例如,大多数函数式语言都有某种对序列或返回第一个元素的列表进行操作的查找函数,其谓词是 true
。我能看到在 Java 8 中实现此目的的唯一方法是:
lst.stream()
.filter(x -> x > 5)
.findFirst()
然而,这对我来说似乎效率低下,因为过滤器将扫描整个列表,至少在我看来是这样(这可能是错误的)。有没有更好的办法?
原文由 siki 发布,翻译遵循 CC BY-SA 4.0 许可协议
不,过滤器不会扫描整个流。它是一个中间操作,它返回一个惰性流(实际上所有的中间操作都返回一个惰性流)。为了说服你,你可以简单地做以下测试:
哪些输出:
您会看到实际上只处理了流的前两个元素。
所以你可以采用你的方法,这非常好。