首页 > 解决方案 > 与 Collection.sort() 相比,使用 stream().sorted() 有什么优势吗?

问题描述

在 Java 中出现流之前,我曾经使用以下行对元素进行排序:

Collections.sort(collection, new CustomComparator());

现在我发现我可以通过以下方式获得相同的结果:

collection.stream().sorted(new CustomComparator());

在这两种情况下,我都使用了一个列表和一个实现的自定义比较器Comparator(我需要这个并且不能在类本身上实现它)。

除了流解决方案看起来更好之外,我还没有发现任何表明它们以任何方式不同的东西。

使用流版本有什么好处吗?我的意思是......它的性能更高吗?有什么区别吗?

标签: javasortingcollectionsjava-stream

解决方案


collection.stream().sorted(new CustomComparator())不对 进行排序collection,只会对流进行排序。

要使用 Stream API 获得类似的结果,您应该使用终端操作 - 收集到新列表中:

collection.stream().sorted(new CustomComparator()).collect(Collectors.toList());

它不会修改原始集合(流源),但Collections.sort会。


如果原始顺序很重要,我会制作一个集合的副本并对其进行排序。

List<?> collectionCopy = new ArrayList(collection);
Collections.sort(collectionCopy, new CustomComparator());

推荐阅读