Java Lambda表达式 Stream

Stream

Stream不是集合元素,它不是数据结构并不保存数据,而是有关算法和计算的,更像是一个高级版本的Iterator,原始版本的Iterator,用户只能显式地一个一个遍历元素并对其进行操作,Stream则只需要对其包含的元素执行什么操作,比如”过滤掉长度大于10的字符串“,"获取每个字符串的首字母”等,Stream会隐式地在内部进行遍历,并作出相应地数据转换

用法

  • Stream.of("a", "b", "c"):构造一个字符串流
  • map
  • collect(Collectors.toList/toSet...)
        **
         * lambda写法
         * Stream.of构造一个流,流的类型编译器会自动判断
         * map(s->s.toUpperCase()),map类型转换,将一个类型的流转换称另一类型,map只接受一个指定类型的参数这里是String
         * s->s.toUpperCase(),参数以及要做的操作,参数会返回可以不是同意类型,但必须是Function接口的一个实例
         * collect(Collectors.toList():由Stream里的值生成一个列表,Collectors是Stream的一个全静态方法类,实现各种有用的集合操作,例如将元素累积到集合中,根据各种标准概括元素等
         * Function 就是一个函数,其作用类似于数学中函数的定义 ,(x,y)即y=f(x)跟<T,R>的作用几乎一致。
         */
        Collection<String> collection = Stream.of("a", "b", "c").map(s->s.toUpperCase()).collect(Collectors.toList());

        assert Arrays.asList("A", "B", "C").equals( collection):"断言不通过";
  • filter:Stream的过滤操作,传入一个Predicate的函数接口,Predicate只有一个判断的boolean返回值方法test,所以一般都写成lambda形式
Collection<String> collection = Stream.of("0abc", "abc", "bcc").filter(value->Character.isDigit(value.charAt(0))).collect(Collectors.toList());
assert Arrays.asList("0abc").equals(collections) : "两者不相等...";

实例:

本博客为Swagger-Ranger的笔记分享,文中源码地址: https://github.com/Swagger-Ranger
欢迎交流指正,如有侵权请联系作者确认删除: liufei32@outlook.com

posted on 2019-04-08 13:31  Swagger-Ranger  阅读(212)  评论(0编辑  收藏  举报

导航