Stream基本操作

1、从JDK1.8开始,为适应大数据时代,类集里面也支持有数据的流式分析处理操作的Stream接口,同时在Collection接口里面也提供有此接口实例化的方法。

获取Stream接口对象:default Stream<E> stream​()

2、Stream基础操作

Stream主要功能是进行数据的分析处理,同时主要是针对于集合中的数据进行分析操作。

import java.util.ArrayList ;
import java.util.Collections ;
import java.util.List ;
import java.util.stream.Stream ;
public class JavaDemo {
    public static void main(String[] args) {
        List<String> all = new ArrayList<String>() ;
        Collections.addAll(all,"a","v","s") ;
        Stream<String> stream = all.stream() ; //获得Stream接口对象
        //System.out.println(stream.count()) ; //输出元素个数,其中count是long型
        //将每一个元素的字母变为小写字母,而后判断字母a是否存在,有多少个
        System.out.println(stream.filter((element)->{
            element.toLowerCase().contains("a")
        }).count()
) ;
    }
}
Stream的常用操作:根据指定条件查询内容

//将满足条件的数据收集起来转为List集合
List<String> result = stream.filter((element)->element.toLowerCase().contains("a")).collect(Collections.toList()) ;
System.out.println(result) ;

在Stream数据流处理的过程中还允许进行数据的分页处理,提供有两个方法:

设置取出的最大数据量:public Stream<T> limit​(long maxSize)

跳过指定数据量:public Stream<T> skip​(long n)

//将满足条件的数据收集起来,然后跳过两个取出两个,再转为List集合
List<String> result = stream.filter((element)->element.toLowerCase().contains("a")).skip(2).limit(2).collect(Collections.toList()) ;
System.out.println(result) ;

3、MapReduce基础模型

在进行数据分析的处理之中有一个最重要的基础模型:MapReduce模型。这个模型分为两个部分:Map处理部分和Reduce分析部分。

示例:

import java.util.ArrayList ;
import java.util.DoubleSummaryStatistics ;
import java.util.List ;
public class DDemo {
    public static void main(String[] args) {
        //用Steram进行分析处理之前,先将数据保存到集合之中
        List<Order> all = new ArrayList<Order>() ;
        all.add(new Order("茉莉蜜茶",19.6,10)) ;
        all.add(new Order("冰糖雪梨",23.0,21)) ;
        all.add(new Order("茉莉花茶",11.0,2)) ;
        all.add(new Order("蜂蜜柚子茶",20.3,8)) ;
        all.add(new Order("白桃乌龙茶",33.2,22)) ;
        all.add(new Order("柠檬红茶",26.8,5)) ;
        //分析购买商品中关于“茶”的信息数据->将商品实体映射为double型商品总价->分析汇总
        DoubleSummaryStatistics stat = all.stream().filter((ele)->ele.getName().contains("茶")).mapToDouble((orderObject)->orderObject.getPrice() *  orderObject.getAmount()).summaryStatistics() ;
        System.out.println("商品购买数量:" + stat.getCount()) ;
        System.out.println("商品购买总量:" + stat.getSum()) ;
        System.out.println("商品购买最高花费:" + stat.getMax()) ;
        System.out.println("商品购买最低花费:" + stat.getMin()) ;
        System.out.println("商品购买平均花费:" + stat.getAverage()) ;
    }
}
//订单信息
class Order {
    private String name ;
    private double price ;
    private int amount ;
    public Order(String name, double price, int amount) {
        this.name = name ;
        this.price = price ;
        this.amount = amount ;
    }
    public String getName() {
        return name ;
    }
    public double getPrice() {
        return price ;
    }
    public int getAmount() {
        return amount ;
    }
}

运行结果:

这些分析操作只是JDK本身提供的支持,实际开发中是不能像这样将数据保存在内存当中。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值