java - 与 Collection.sort() 相比,使用 stream().sorted() 有什么优势吗?
问题描述
在 Java 中出现流之前,我曾经使用以下行对元素进行排序:
Collections.sort(collection, new CustomComparator());
现在我发现我可以通过以下方式获得相同的结果:
collection.stream().sorted(new CustomComparator());
在这两种情况下,我都使用了一个列表和一个实现的自定义比较器Comparator
(我需要这个并且不能在类本身上实现它)。
除了流解决方案看起来更好之外,我还没有发现任何表明它们以任何方式不同的东西。
使用流版本有什么好处吗?我的意思是......它的性能更高吗?有什么区别吗?
解决方案
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());
推荐阅读
- c++ - 带有 EnumDesktopWindows 的 printwindow 返回黑色图像
- python-3.x - groupby ,自定义函数每前 4 行使用一列(分组后)
- php - 如何“从 PHP 中的嵌套数组结构中获取数据”
- sql-server - 无法使用动态查询创建临时表
- r - ggplot2 3.2.0 版和bayesAB 绘图冲突
- sql - 在 Power BI 中的 Progress Open edge SQL 语句中组合日期字段和时间字段
- oracle-sqldeveloper - 如何显示来自 SQL Developer 的韩文字母
- android - 用于照片堆栈的 Android 图标生成器
- c++ - 为什么我的 Go 解决方案给出的结果与 C++ 不同?
- bash - printf 在执行“printf H%03s 3A”时添加尾随空格而不是 0