关于java中Stream中的一些问题

用代码块功能插入代码,请勿粘贴截图

package Api;

import java.util.ArrayList;
import java.util.List;

public class Stream {
public static void main(String[] args) {

    List list3 = new ArrayList<>();
    list3.add("张无忌");
    list3.add("张三");
    list3.add("张飞");
    list3.add("王立伟");

   long size = list3.stream().filter(s -> s.length() ==3).count();
    System.out.println(size);

    java.util.stream.Stream stream = list3.stream().filter(s -> s.startsWith("张"));
    System.out.println(stream);

}

}

运行结果及报错内容

2
java.util.stream.ReferencePipeline$2@7b23ec81

我想要达到的结果

想要知道为什么第二个运行不了,请求解惑

public static void main(String[] args) {
            List<String> list3 = new ArrayList<>();
            list3.add("张无忌");
            list3.add("张三");
            list3.add("张飞");
            list3.add("王立伟");

            long size = list3.stream().filter(s -> s.length() ==3).count();
            System.out.println(size);
            List<String> stream = list3.stream().filter(s -> s.startsWith("张")).collect(Collectors.toList());
            System.out.println(stream);
        }

这不是运行了吗?返回给你一个Stream流对象

stream不能直接打印,这打印出来的是stream的类型
你要打印它具体的属性啊

第二个改成 List<String> resultList = list3.stream().filter(s -> s.startsWith("张")).collect(Collectors.toList());
stream的方法分成两大类,一类是过程定义方法,另一类是计算终端方法。
过程定义方法仅标识当前stream应该做什么操作,实际并不执行,此类方法的返回值类型是java.util.stream.Stream。比如你这里的filter就是过程定义方法。
终端方法是实际运算的方法,它会将它之前定义的各种过程定义方法顺序执行一遍,并返回开发者需要的返回值。这些方法有collectcountmapToInt等等。