何时优先使用专用流方法而非Collectors类方法,或是反之?
别再混用Collectors与专用流的聚合方法啦!
相信不少Java开发者都用过Collectors类——它提供了一大堆实用的聚合操作工厂方法,比如summingInt()、averagingDouble()、maxBy()、minBy()这些,能帮我们快速完成求和、求平均、找最值这类操作。
但你有没有注意到,Java的专用流(比如IntStream、DoubleStream、LongStream)本身也自带了对应的聚合方法:比如IntStream有sum()、average()、max()、min(),DoubleStream和LongStream也一样。这两类方法的功能其实是重复的,而我经常看到有人会把它们混着用,比如明明已经拿到了IntStream,却还要写collect(Collectors.summingInt(i -> i)),这完全没必要嘛!
什么时候用哪种方法?
- 如果已经是专用流(Int/Double/LongStream):直接用流自带的方法就好,代码更简洁,执行效率也更高。比如
int sum = intStream.sum();比int sum = intStream.collect(Collectors.summingInt(Integer::intValue));清爽太多了。 - 如果是普通的
Stream<T>:这时候专用流的方法用不了,就需要Collectors类的方法来帮忙。比如你有一个Stream<Person>,要计算所有人的年龄总和,就得用stream.collect(Collectors.summingInt(Person::getAge))。
说白了,Collectors是通用型的工具,适配各种类型的Stream;而专用流的方法是针对数值型流优化过的,更直接高效。搞清楚这一点,就能避免不必要的混用,写出更干净的代码啦!
内容的提问来源于stack exchange,提问作者Ousmane D.
相关产品推荐
相关产品推荐

