若输入List已排序,Stream处理后返回的List是否始终有序?
已排序List经Stream过滤后是否仍保持有序?
当然会始终保持有序啦!这里的关键在于Stream的顺序性——对于像ArrayList这种本身就是有序的集合来说,它生成的Stream是有序流(ordered stream)。
当你对有序流执行filter操作时,它只会按照原始集合的遍历顺序,保留符合谓词条件的元素,不会改变元素之间的相对顺序。最后用Collectors.toList()收集结果时,也会严格按照Stream处理后的顺序来生成新的List。
举个简单的代码例子就能验证:
import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class StreamFilterOrderDemo { public static void main(String[] args) { List<String> sortedInput = Arrays.asList("apple", "banana", "cherry", "date"); List<String> output = sortedInput.stream() .filter(s -> s.startsWith("a") || s.startsWith("c")) .collect(Collectors.toList()); // 输出结果为 ["apple", "cherry"],完全遵循原有序列的相对顺序 System.out.println(output); } }
需要额外说明的是:只有当原始集合是有序的(比如ArrayList、LinkedList,或是经过排序的集合),并且Stream没有执行打乱顺序的操作(比如unordered(),或者在并行流中显式放弃顺序),过滤后的结果才会维持原有顺序。但你的场景是基于已排序的List<String>执行串行filter操作,所以完全不用担心顺序被打乱的问题。
内容的提问来源于stack exchange,提问作者Jelly Orns
相关产品推荐
相关产品推荐

