zoukankan      html  css  js  c++  java
  • Stream数据流(Collection接口扩充)

      从JDK1.8发行的时候实际上就是世界上大数据兴起的时候,在整个大数据开发里面有一个最经典的模型就是:MapReduce 实际上这属于数据的两个操作阶段:

        Map:处理数据库。

        Reduce:分析数据。

      而在类集里面由于其本身的作用也可以进行大量数据的存储,所有就顺其自然的产生了MapReduce的操作,而这些操作通过Stream数据流来完成了。

    Collection接口改进

      现在的Collection接口里面除了定义有一些抽象方法之外,也提供有一些普通方法,下面来观察这样的一个方法,下面观察这样的一个方法:

        forEach()输出支持:default void forEach(Consumer<? super T> action)

        取得Stream数据流对象:public default Stream<E> stream();

     1 package cn.Tony.demo;
     2 
     3 import java.util.ArrayList;
     4 import java.util.List;
     5 
     6 public class TestDemo{
     7     public static void main(String[] args) throws Exception {
     8         List<String> all=new ArrayList<String>();
     9         all.add("java");
    10         all.add("python");
    11         all.add("javascript");
    12         all.add("jsp");
    13         all.forEach(System.out::println);
    14     }
    15 }   

      这种只是进行一个现实,如果需要进更复杂的处理,还是使用Iterator比较容易一些

      但是在Collection接口里面提供有一个重要的Stream()方法,这个方法才是JDK1.8中数据操作的关键,

     1 package cn.Tony.demo;
     2 
     3 import java.util.ArrayList;
     4 import java.util.List;
     5 import java.util.stream.Stream;
     6 
     7 public class TestDemo{
     8     public static void main(String[] args) throws Exception {
     9         List<String> all=new ArrayList<String>();
    10         all.add("java");
    11         all.add("python");
    12         all.add("javascript");
    13         all.add("jsp");
    14         Stream<String> stream=all.stream();
    15         System.out.println(stream.count());
    16     }
    17 }   

      将集合的数据交给了Stream流之后就相当于这些数据一个一个进行处理,而count()方法是做了一个数据的统计,整个流程还是出现了遍历的操作。

    Stream 基本操作

      在之前使用的count()方法是针对于数据量做了一个统计的操作,除了这些之外,也可以进行数据的过滤。例如:满足于某些条件的内容才允许做数量通计。

    范例:通计数据过滤

     1 package cn.Tony.demo;
     2 
     3 import java.util.ArrayList;
     4 import java.util.List;
     5 import java.util.stream.Stream;
     6 
     7 public class TestDemo{
     8     public static void main(String[] args) throws Exception {
     9         List<String> all=new ArrayList<String>();
    10         all.add("java");
    11         all.add("python");
    12         all.add("javascript");
    13         all.add("jsp");
    14         Stream<String> stream=all.stream();
    15         //统计这些数据里面带有java的内容个数
    16         System.out.println(stream.filter((e) ->e.contains("java")).count());
    17     }
    18 }   

      现在我不想要这些数据的个数,我希望得到具体那些数据通过了筛选,那么就可以使用一个收集器来完成。

     1 package cn.Tony.demo;
     2 
     3 import java.util.ArrayList;
     4 import java.util.List;
     5 import java.util.stream.Collectors;
     6 import java.util.stream.Stream;
     7 
     8 public class TestDemo{
     9     public static void main(String[] args) throws Exception {
    10         List<String> all=new ArrayList<String>();
    11         all.add("java");
    12         all.add("python");
    13         all.add("javascript");
    14         all.add("jsp");
    15         Stream<String> stream=all.stream();
    16         //统计这些数据里面带有java的内容个数
    17         System.out.println(stream.filter((e) ->e.contains("java"))
    18                 .collect(Collectors.toList()));//个数
    19     }
    20 }   

       收集完的数据你依然属于List集合,所以可以直接使用List进行接收。

        在Stream里面接口里面重点有两个操作方法:

          取出最大内容:Stream<T> limit(long maxSize)

          跳过的数据量:Stream<T> skip(long n) 

     1 package cn.Tony.demo;
     2 
     3 import java.util.ArrayList;
     4 import java.util.List;
     5 import java.util.stream.Collectors;
     6 import java.util.stream.Stream;
     7 
     8 public class TestDemo{
     9     public static void main(String[] args) throws Exception {
    10         List<String> all=new ArrayList<String>();
    11         all.add("1.java");
    12         all.add("2.python");
    13         all.add("3.javascript");
    14         all.add("4.jsp");
    15         all.add("5.redis");
    16         all.add("6.nginx");
    17         all.add("7.sso");
    18         Stream<String> stream=all.stream();
    19         //统计这些数据里面带有java的内容个数
    20         List<String> list=stream.skip(5).limit(2)
    21                 .map((s)->s.toUpperCase())
    22                 .collect(Collectors.toList());//把收集器结果给了List集合
    23         System.out.println(list);
    24     }
    25 }   

       如果要进行分页的操作形式处理。而且使用map()函数还可以进行一些简单的数据操作

    MapReduce模型

      MapReduce是整个Stream核心所在。可以这么说,之前的所有操作都只是做了一个MapReduce衬托 对于Mapreduce操作主要有两个阶段组成:

        map():指的是针对于数据进行先期的操作处理 例如:做一些简单的数学运算,

        reduce():是进行数据的统计分析。

    范例:编写一个简单的数据统计操作 

     1 class Order{
     2     private String title;
     3     private double price;
     4     private int amount;
     5     public Order(String title, double price, int amount) {
     6         super();
     7         this.title = title;
     8         this.price = price;
     9         this.amount = amount;
    10     }
    11     public String getTitle() {
    12         return title;
    13     }
    14     public void setTitle(String title) {
    15         this.title = title;
    16     }
    17     public double getPrice() {
    18         return price;
    19     }
    20     public void setPrice(double price) {
    21         this.price = price;
    22     }
    23     public int getAmount() {
    24         return amount;
    25     }
    26     public void setAmount(int amount) {
    27         this.amount = amount;
    28     }
    29     
    30 }

       随后在List集和里面保存这些订单的信息,肯定会有多个订单的信息存在。

  • 相关阅读:
    3个同一行div的摆放div
    Android 项目开发
    iOS 8
    iOS 8
    __FILE__ 与 $_SERVER['SCRIPT_FILENAME']的区别
    高德百度坐标系转换方法
    高德百度坐标系转换方法
    在iOS开发中使用icon font的方法
    在iOS开发中使用icon font的方法
    UIView的setNeedsLayout, layoutIfNeeded 和 layoutSubviews 方法之间的关系解释
  • 原文地址:https://www.cnblogs.com/Tony98/p/10571030.html
Copyright © 2011-2022 走看看