人们是否在Streams / Collectors中不正确地使用collectionAndThen方法?

时间:2019-01-27 06:37:50

标签: java java-8 java-stream collectors

我已经看到很多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来查看其源代码)。

我了解有必要使用该方法,有时它更干净。但这是在这种情况下使用不当还是我遗漏了一些东西吗?

0 个答案:

没有答案