zoukankan      html  css  js  c++  java
  • java8-Stream原理

    前言

    java8新特性目前使用非常广泛,其中Stream更是最常用的特性,这篇文章将介绍Stream的原理,如果你现在还不怎么会用的话可以看一下菜鸟教

    https://www.runoob.com/java/java8-streams.html,或者我的博客https://www.runoob.com/java/java8-streams.html。如果你想学更多实战中的运用最好

    去读一下《Java 8 in Action》和 《Effective Java》第三版,《Java 8 in Action》这本书从原理讲解,性能测试和分析,实战用法多个角度介绍java8新特性,

    是非常值得读的一本好书。

    原理分析

    下面是一个小例子

    public static void main(String[] args) {
            List<UserInfo> userInfos = getUserInfos();
            //日常开发中常见用法,先filter后map,然后收集成一个集合
            List<String> userNames = userInfos.stream().filter(userInfo -> userInfo.getAge() > 23).map(UserInfo::getName)
                    .collect(Collectors.toList());
            System.out.println(userNames);
        }
    
        private static List<UserInfo> getUserInfos() {
            UserInfo userInfo = new UserInfo();
            userInfo.setName("大明");
            userInfo.setAge(23);
    
            UserInfo userInfo2 = new UserInfo();
            userInfo2.setName("小明");
            userInfo2.setAge(24);
    
            List<UserInfo> userInfos = Lists.newArrayList();
            userInfos.add(userInfo);
            userInfos.add(userInfo2);
            return userInfos;
        }

    我们知道流的中间操作是不会真正执行的,最后调用终止操作时才会真正执行上面代码中的filter和map中传入的方法,那么这些方法肯定需要存起来,等到终止操作的时候才调用。

    下面这张图表示Stream的执行过程,这些中间操作由一个链表来连接起来。

     紧接着执行colletct将这些操作反向连接起来,然后对数据一层一层的进行操作

    阅读源码建议

    Stream的源码可以直接直接点方法进去,然后看一下继承结构,阅读一下文档,然后看代码就能搞懂了,唯一难受的是大量使用了内部类,阅读源码时最好切多个页面来看。

  • 相关阅读:
    SaveFileDialog
    在SQL Server 2008中配置文件流(FILESTREAM)
    C#中图片转二进制到存储数据库
    OpenFileDialog
    WPF中自定义只能输入数字的TextBox
    QL Server 2008新特性:FILESTREAM
    ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)
    winxp+Apache+Mysql+Python+Django安装配置
    django最佳实践
    Sphinx 在 windows 下安装使用
  • 原文地址:https://www.cnblogs.com/zhandouBlog/p/11519969.html
Copyright © 2011-2022 走看看