对集合元素排序:Sorted Stream与列表排序哪种效率更高?
如何用指定Comparator对Collection元素排序并生成列表?
如果你手里有一个Collection<Item>类型的集合,还准备好了对应的Comparator<Item>比较器,想要把集合里的元素按比较器规则排序后得到List<Item>结果,这里有两种非常实用的实现方式:
方法一:传统的列表转换+Collections.sort()
这种是Java早期版本就支持的经典做法,步骤清晰直白:先把集合元素复制到可修改的列表(比如ArrayList),再调用Collections.sort()方法传入列表和比较器完成排序:
Collection<Item> items = ...; Comparator<Item> itemComparator = ...; List<Item> sortedItems = new ArrayList<>(items); Collections.sort(sortedItems, itemComparator);
这种方法的优势是代码易懂,不需要依赖Stream API,兼容性拉满,适合所有Java版本。
方法二:使用Stream API的sorted()方法
从Java 8开始引入的Stream API提供了更简洁的函数式写法,通过流式操作一步完成排序和列表收集:
Collection<Item> items = ...; Comparator<Item> itemComparator = ...; List<Item> sortedItems = items.stream() .sorted(itemComparator) .collect(Collectors.toList());
这里stream()将集合转为流,sorted(itemComparator)用指定的比较器对流中元素排序,最后collect(Collectors.toList())把排序后的元素收集成列表。这种写法更优雅,而且全程是无副作用的操作(不会修改原集合)。
内容的提问来源于stack exchange,提问作者lexicore
相关产品推荐
相关产品推荐

