Java 8 新特性——Stream

什么是Stream?

       Java8中,Collection新增了两个流方法,分别是Stream() 和 parallelStream() 【/ˈpærəlel/ 音标哈哈哈哈哈】

       Java8中添加了一个新的接口类Stream,相当于高级版的 Iterator,ta可以通过 Lambda 表达式对集合进行大批量数据操作,或者高效的聚合数据操作。

为什么要使用 Stream?

        在Java8之前,通常用 普通循环、for 循环 或者 Iterator 迭代来重排序合并数据,或者通过重新定义 Collections.sorts的 Comparator 方法来实现,这两种方式对 大数量系统来说,效率不理想。

        Stream的聚合操作与数据库SQL 的聚合操作 sorted、filter、map 等类似。应用层可以高效的实现类似数据库SQL 的聚合操作了,而在数据库操作方面,Stream 不仅可以通过串行的方式实现数据操作,还可以通过并行的方式处理大批量数据,提高数据的处理效率。

Stream例子:

// 找出姓张名字最长的长度
List names = Arrays.asList("关羽", "赵云", "刘备", "张飞", "张飞123");
int max = names.stream().filter(name -> name.startsWith("张")).mapToInt(String :: length).max().getAsInt();
System.out.println(max);

用for循环试试:

        List names = Arrays.asList("关羽", "赵云", "刘备", "张飞", "张飞123");        
        List li = new ArrayList();
        for(int i = 0; i< names.size(); i++){
            li.add(names.get(i).length());
            System.out.println("循环中的:" + names.get(i));
        }

可以看出 Stream 减少了好几行代码。

stream常用类型:

  1. map():  将流中的元素进行再次加工形成一个新流,流中的每一个元素映射为另外的元素。

  2. filter():  返回结果生成新的流中,只包含满足筛选条件的数据。

  3. limit():  返回指定数量的元素的流。返回的是steam 中前面的 n个元素。

  4. skip():  和 limit() 相反,将前几个元素跳过(取出)再返回一个流,如果流中的元素小于或者等于n,就会返回一个空的流。

  5. sorted():  将流中的元素按照自然排序方式进行排序。

  6. distinct(): 将流中的元素去重后输出。

  7. peek():  对流中每个元素执行操作,并返回一个新的流,返回的流还是包含原来流中的元素。
     

你可能感兴趣的:(JVM,Java8,java)