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本身提供的支持,实际开发中是不能像这样将数据保存在内存当中。