美文网首页Java
Java8之StreamAPI

Java8之StreamAPI

作者: TZX_0710 | 来源:发表于2019-09-16 09:46 被阅读0次

    Java8的两大特性
    (1)Lambda 表达式
    Lambda表达式 前面文章已经详细讲解过 lambda语法、函数式编程、常用内置接口、lambda的延迟执行优势
    (2)StreamApi
    说到Stream便容易想到I/O Stream,而实际上我们这里讲的Stream它是Java8中对数据处理的一种抽象描述;
    我们可以把它理解为数据的管道,我们可以通过这条管道提供给我们的API很方便的对里面的数据进行复杂的操作!比如查找、过滤和映射(类似于使用SQL);
    更厉害的是可以使用Stream API 来并行执行操作;
    简而言之,Stream API 提供了一种高效且易于使用的处理数据的方式,解决了已有集合类库操作上的弊端

    image.png
    stream接口继承自BaseStream,其中IntStream, LongStream, DoubleStream对应三种基本类型(int, long, double,注意不是包装类型),Stream对应所有剩余类型的stream视图。为不同数据类型设置不同stream接口,可以提高性能,并针对不同数据类型提供不同方法实现。那什么不把IntStream等设计成Stream的子接口?毕竟这接口中的方法名大部分是一样的。答案是这些方法的名字虽然相同,但是返回类型不同,如果设计成父子接口关系,这些方法将不能共存,因为Java不允许只有返回类型不同的方法重载。
    public class StreamApi {
        public static void main(String[] args) {
            //筛选出名字为张三的 统计共有多少个
            List <String> strings = Arrays.asList( "张三", "李斯特","里斯","张三" );
            //传统方法
            int count=0;
            for(int i=0;i<strings.size();i++){
                if(strings.get( i ).equals( "张三" )){
                    count++;
                }
            }
            System.out.println("数量"+count);
            //Java8方法 StreamApi
           long counts = strings.stream().
                   //先筛选名字等于张三的
                    filter( e -> e.equals( "张三" ) )
                   //获取数量
                    .count();;
            System.out.println(counts);
    
        }
    }
    

    总结:从上图可以发现对于传统模式操作java集合,Java8的Stream更为优雅、简洁、代码舒适

    相关文章

      网友评论

        本文标题:Java8之StreamAPI

        本文链接:https://www.haomeiwen.com/subject/unaiyctx.html