流对数据数理对于迭代的区别

    文章参考:《Java核心技术卷 卷2》

在处理集合时,我们通常会迭代遍历他的元素,并对元素进行各种操作。例如:我们想要对某本书的所有长单词进行计数:

        String con=new String(Files.readAllBytes(Paths.get("book.txt")),        StandardCharsets.UTF_8);//从文件读取字符串
        List<String> words=List.of(con.split("\\PL+")); //进行文本切割
        //迭代
        int count= 0;
        for (String word : words) {
             if (word.length()>12){
                 count++;
             }
        }

        //使用流
        long num=words.stream().filter(w->w.length() >12).count();

现在我们不必扫描整个代码去查找过滤和计数操作,方法名直接告诉我们想要做什么。

使用循环需要自己去编写代码来执行指定的操作,而流却能直接以我们想要的运行方式调度这些操作,只要结果是正确的就行。

注:1.流遵循了“做什么而非怎么做‘的原则。
2.流并不存储其元素,所有的元素都可能在底层集合中,或是按需生成。
3.流的操作不会修改其数据源。例如:filter方法不会从流中移除元素,而是会生成一个新的流,其中不包括被过滤掉的元素。
4.流的操作是尽可能惰性执行的。

你可能感兴趣的:(java基础知识,1024程序员节,java)