• Stream数据流


    一.Stream数据流
      从JDK1.8开始,由于已经进入到了大数据的时代,所以在类集里面也支持有数据的分析处理操作(数据的流式分析处理操作),为此就专门提供了一个Stream的接口,同时在Collection接口里面也提供有为此接口实例化的方法:
      并行流式分析:default Stream<E> parallelStream()  多个线程共同参与分析
      单一线程分析: default Stream<E> stream()
    --Stream接口的基础操作
      Stream的主要功能是进行数据的分析处理,同时主要是针对于集合中的数据进行分析操作.

     1 public class MyCollectionsDemo {
     2     public static void main(String[] args) {
     3         List<String> all = new ArrayList<>();
     4         //追加元素
     5         Collections.addAll(all, "python", "c++", "java", "Go", "Ruby");
     6         Stream<String> stream = all.stream();       //实例化Stream对象
     7 //        System.out.println(stream.count());     //输出元素的个数
     8         //其最大的好处是可以根据函数式编程实现数据的流式处理
     9         //例如需要获取集合中带有字母G的元素
    10         // 将每一个字母都转变为小写字母,并且判断字母是否存在
    11         long count = stream.filter((ele) -> ele.toLowerCase().contains("j")).count();//断言型的函数式接口
    12         System.out.println(count);
    13     }
    14 }

    --但是以上的程序只是实现了一些最基础的数据的个数的统计,而更多情况下时获取里面的满足条件的数据内容,因此此时可以实现数据的采集操作:
    --范例:数据采集

     1 public class MyCollectionsDemo {
     2     public static void main(String[] args) {
     3         List<String> all = new ArrayList<>();
     4         //追加元素
     5         Collections.addAll(all, "python", "c++", "java", "Go", "Ruby");
     6         Stream<String> stream = all.stream();       //实例化Stream对象
     7         //将满足条件的数据收集起来转化为List集合
     8         List<String> list = stream.filter((ele) -> ele.toLowerCase().contains("j")).collect(Collectors.toList());//断言型的函数式接口
     9         System.out.println(list);
    10     }
    11 }

    --在Stream数据流处理的过程中,还允许进行数据的分页处理,提供有两个方法:
      设置取出的最大的数据量: Stream<T> limit(long maxSize)
      跳过指定数据量: Stream<T> skip(long n)

     1 public class MyCollectionsDemo {
     2     public static void main(String[] args) {
     3         List<String> all = new ArrayList<>();
     4         //追加元素
     5         Collections.addAll(all, "python", "c++", "java", "Go", "Ruby","jsp","json","html","css");
     6         Stream<String> stream = all.stream();       //实例化Stream对象
     7         //将满足条件的数据收集起来转化为List集合
     8         List<String> list = stream.filter((ele) -> ele.toLowerCase().contains("j")).skip(1).limit(2).collect(Collectors.toList());//断言型的函数式接口
     9         System.out.println(list);
    10     }
    11 }

    --运行结果

    [jsp, json]
    
    Process finished with exit code 0

    -此时其逃过了第一个收集到的数据"java",输出了之后获取到的两个数据.Stream的操作主要是利用自身的特点实现数据的分析处理操作.

    二.MapReduce基础模型
      在进行数据分析的处理之中,有一个最重要的基础模型,那就是MapReduce模型,对于这个模型,一共是分为两个部分,一个是Map处理部分,第二个是Reduce分析部分.在进行数据分析之前,必须要对数据进行合理的处理,而后才可以做统计分析操作.

     1 package 类集合框架.集合工具类;
     2 
     3 import java.util.ArrayList;
     4 import java.util.DoubleSummaryStatistics;
     5 import java.util.List;
     6 import java.util.stream.Stream;
     7 
     8 /**
     9  * @author : S K Y
    10  * @version :0.0.1
    11  */
    12 class Order{    //订单信息
    13     private String name;    //购买的商品的名称
    14     private double price;   //商品的单价
    15     private int amount;     //商品的数量
    16 
    17     public Order(String name, double price, int amount) {
    18         this.name = name;
    19         this.price = price;
    20         this.amount = amount;
    21     }
    22 
    23     public String getName() {
    24         return name;
    25     }
    26 
    27     public double getPrice() {
    28         return price;
    29     }
    30 
    31     public int getAmount() {
    32         return amount;
    33     }
    34 }
    35 public class MyMapReduceDemo {
    36     public static void main(String[] args) {
    37         //如果要想使用Stream进行分析处理,则一定要将全部分析的数据保存在集合之中
    38         List<Order> all = new ArrayList<>();
    39         all.add(new Order("小娃娃",9.9,10));
    40         all.add(new Order("电动变形金刚",999.9,2));
    41         all.add(new Order("笔记本电脑",8999.9,4));
    42         all.add(new Order("茶杯",2.9,200));
    43         all.add(new Order("电动茶具",112.9,100));
    44         //统计分析够爱商品之中带有电的产品,并且进行单价和数量的处理随后分析汇总
    45         DoubleSummaryStatistics statistics = all.stream().filter(order -> order.getName().contains("电"))
    46                 .mapToDouble(value -> value.getPrice() * value.getAmount()).summaryStatistics();
    47         System.out.println("商品购买种类数量: " + statistics.getCount());
    48         System.out.println("商品购买总价: " + statistics.getSum());
    49         System.out.println("商品平均花费: " + statistics.getAverage());
    50         System.out.println("商品最高花费: " + statistics.getMax());
    51         System.out.println("商品最低花费: " + statistics.getMin());
    52     }
    53 }

    --运行结果

    商品购买种类数量: 3
    商品购买总价: 49289.4
    商品平均花费: 16429.8
    商品最高花费: 35999.6
    商品最低花费: 1999.8
    
    Process finished with exit code 0

    --这些分析操作只是JDK本身提供的支持,而实际之中肯定不可能这样进行,因为所有的数据如果都保存在内存之中,那么面对与大数据的环境,系统无法承载...

  • 相关阅读:
    Flowable学习笔记(二、BPMN 2.0-基础 )
    Flowable学习笔记(一、入门)
    只有程序员才懂的幽默
    Navicat自动备份数据库
    两个原因导致Spring @Autowired注入的组件为空
    设计模式—— 十二 :代理模式
    设计模式—— 十 一:建造者模式
    SpringBoot学习笔记(十一:使用MongoDB存储文件 )
    Swagger API文档集中化注册管理
    Spring Boot2从入门到实战:集成AOPLog来记录接口访问日志
  • 原文地址:https://www.cnblogs.com/skykuqi/p/11449478.html
Copyright © 2020-2023  润新知