gpt4 book ai didi

java - 何时使用专门的流方法而不是 Collectors 类中的方法,反之亦然?

转载 作者:行者123 更新时间:2023-12-02 05:31:29 24 4
gpt4 key购买 nike

我们可以看到Collectors类包含许多常见聚合操作的工厂方法。仅举几例summingXXX , averagingXXX , maxBy , minBy .

这些方法实际上是在专门流上调用方法的重复功能。以IntStream为例,这有一个 sum() , average() , max()min()分别。

DoubleStream 也是如此和 LongStream .

我时不时地看到人们交替使用属于 Collectors 类的方法和专用流方法。

例如,假设我们有 List<Employee>而想要获取平均工资,可以使用专门的原始流中的方法。

OptionalDouble averageUsingIntStream =
employees.stream()
.mapToInt(Employee::getSalary)
.average();

或者使用 Collectors 中的工厂方法类。

Double averageUsingCollectors =
employees.stream()
.collect(Collectors.averagingInt(Employee::getSalary));

现在,我的问题是这种重复功能背后的动机是什么?在什么情况下使用第一种方法或第二种方法更好?

最佳答案

Collectors 类中存在上述工厂方法的真正动机是用作下游收集器,即 Java 运行时将其应用于另一个收集器的结果的收集器。这使得人们能够组合在一起并执行更复杂的聚合。

例如有groupingBy接受下游收集器的收集器,collectingAndThen , partitioningBy , flatMapping (java-9)等。

因此,经验法则是仅使用问题中的上述方法作为下游收集器。

专用的原始流也更高效,因此如果您只想计算 sum()average()max()min() 那么我会坚持原始特化。

关于java - 何时使用专门的流方法而不是 Collectors 类中的方法,反之亦然?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49965753/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com