使用stream()。sorted()在Collection.sort()上有什么好处吗?

时间:2018-04-27 19:05:32

标签: java sorting collections java-stream

我曾经使用以下行来在Java中显示流之前对元素进行排序:

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

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

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

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

除了流解决方案看起来更好之外,我还没有找到任何表明它们有任何不同之处的内容。

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

1 个答案:

答案 0 :(得分:6)

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());