我曾经使用以下行来在Java中显示流之前对元素进行排序:
Collections.sort(collection, new CustomComparator());
现在我发现我可以通过以下方式获得相同的结果:
collection.stream().sorted(new CustomComparator());
在这两种情况下,我都使用一个列表和一个实现Comparator
的自定义比较器(我需要这个并且不能在类本身上实现它)。
除了流解决方案看起来更好之外,我还没有找到任何表明它们有任何不同之处的内容。
使用流版本有什么好处吗?我的意思是......性能更高吗?有什么不同吗?
答案 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());