Java 在流操作中执行排序操作 publicstaticvoidmain(字符串[]args){ 列表=新的ArrayList(); 对于(int i=0;ii%2==0)。limit(10)。排序((i,j)->j.compareTo(i)) .collect(Collectors.toList()); l、 forEach(System.out::println); }

Java 在流操作中执行排序操作 publicstaticvoidmain(字符串[]args){ 列表=新的ArrayList(); 对于(int i=0;ii%2==0)。limit(10)。排序((i,j)->j.compareTo(i)) .collect(Collectors.toList()); l、 forEach(System.out::println); },java,Java,这将过滤元素,直到我们达到限制10,然后对这10个元素进行排序。这一理解正确吗?从逻辑上讲,这意味着收集将从限制、从过滤器和从流中请求项目 流是惰性的,因为除非调用终端操作,否则不会计算中间操作 中间操作返回一个新的流。他们总是懒惰;执行中间操作,例如filter(),实际上并不执行任何过滤,而是创建一个新的流,在遍历时,该流包含与给定谓词匹配的初始流元素。在执行管道的终端操作之前,不会开始遍历管道源 操作链按照从collect()到filter()的相反顺序进行惰性评估,每个步骤在上一步生成值

这将过滤元素,直到我们达到限制10,然后对这10个元素进行排序。这一理解正确吗?

从逻辑上讲,这意味着
收集
将从
限制
、从
过滤器
和从
中请求项目

流是惰性的,因为除非调用终端操作,否则不会计算中间操作

中间操作返回一个新的流。他们总是懒惰;执行中间操作,例如
filter()
,实际上并不执行任何过滤,而是创建一个新的流,在遍历时,该流包含与给定谓词匹配的初始流元素。在执行管道的终端操作之前,不会开始遍历管道源

操作链按照从
collect()
filter()
的相反顺序进行惰性评估,每个步骤在上一步生成值后都会立即使用这些值。

在这里看起来很亮
public static void main(String[] args) {

    List<Integer> list = new ArrayList<>();

    for (int i = 0; i < 100; i++) {
        list.add(i);
    }

    List<Integer> l = list.stream().filter(i -> i % 2 == 0).limit(10).sorted((i, j) -> j.compareTo(i))
            .collect(Collectors.toList());

    l.forEach(System.out::println);
}