我已经看到很多Stream
实例,它们在终端机Collectors
操作中使用collectingAndThen
collect
方法。在许多这样的示例中,finisher
参数(用于collectingAndThen
方法的第二个参数)是一个相对简单的调用,不需要使用collectingAndThen
方法,因为生成的数据结构只需使用第一个Collector
即可将其作为参数传递给finisher
参数中的方法,并且实际调用collectingAndThen
会添加不必要的操作。
例如(使用Oracle documentation for collectingAndThen
中的实际示例,我知道这是一个极其简单的示例,但是我已经看到很多人在StackOverflow和其他站点上仅使用1或2个中介就可以完成类似的操作操作及其简单性不是这里要讨论的因素)-
List<String> people =
people.stream().collect(collectingAndThen(toList(), Collections::unmodifiableList));
与-
相同List<String> people = Collections.unmodifiableList(
people.stream().collect(toList());
但是在第一个示例中使用collectingAndThen
会添加不必要的操作(您可以查看OpenJDK implementation of Collectors
来查看其源代码)。
我了解有必要使用该方法,有时它更干净。但这是在这种情况下使用不当还是我遗漏了一些东西吗?