在 Java Streams 中 - stream.max(Comparator)stream.collect(Collectors.maxBy(Comparator)) 在性能方面有什么区别。两者都将根据传递的比较器获取最大值。如果是这种情况,为什么我们需要使用 collect 方法进行收集的额外步骤?我们什么时候应该选择前者和后者?适契约(Contract)时使用两者的用例场景是什么?

最佳答案

他们做同样的事情,共享同样的代码。



你没有。如果您要这样做,请使用max()。但在某些情况下,收集器可以派上用场。例如:

Optional<Foo> result = stream.collect(createCollector());

其中 createCollector() 将根据某些条件返回一个收集器,可能是 maxBy、minBy 或其他条件。

通常,您不应该太在意执行相同操作的两种方法之间可能存在的微小性能差异,并且很有可能以相同的方式实现。相反,您应该使您的代码尽可能清晰易读。

10-05 18:51