1 Stream基本操作
从JDK 1.8开始,由于已经进入了大数据时代,所以在类集里面也支持有数据的流式分析处理操作,为此就专门提供了一个Stream的接口,同时在Collection接口里面也提供有为此接口实例化的方法。
(1)获取Stream接口对象:default Stream<E> stream()
Stream主要功能是进行数据的分析处理,同时主要是针对于集合中的数据进行分析操作。
范例:Stream的基本操作
package org.lks.demo;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.stream.Stream;
public class JavaReflectDemo {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
Collections.addAll(list, "Java", "JSP", "JavaScript", "Json", "Python", "Ruby", "Go");
Stream<String> stream = list.stream();
System.out.println(stream.filter((ele)->ele.toLowerCase().contains("j")).count());
}
}
但是以上的程序只是实现了一些最基础的数据的个数的统计,而更多情况下我们可能需要的是获取里面的满足条件的数据内容,所以此时可以实现数据的采集操作。
范例:数据采集
package org.lks.demo;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class JavaReflectDemo {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
Collections.addAll(list, "Java", "JSP", "JavaScript", "Json", "Python", "Ruby", "Go");
Stream<String> stream = list.stream();
List<String> result = stream.filter((ele)->ele.toLowerCase().contains("j")).collect(Collectors.toList());
System.out.println(result);
}
}
在Stream数据流处理的过程之中还允许进行数据的分页处理,提供有两个方法:
(1)设置取出最大的数据量:Stream<T> limit(long maxSize)
(2)跳过指定数据量:Stream<T> skip(long n)
范例:观察分页
package org.lks.demo;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class JavaReflectDemo {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
Collections.addAll(list, "Java", "JSP", "JavaScript", "Json", "Python", "Ruby", "Go");
Stream<String> stream = list.stream();
List<String> result = stream.filter((ele)->ele.toLowerCase().contains("j")).skip(2).limit(2).collect(Collectors.toList());
System.out.println(result);
}
}
Stream的操作主要是利用自身的特点实现数据的分析处理操作。
2 MapReduce基础模型
在进行数据分析的处理之中有一个最重要的基础模型:MapReduce模型,对于这个模型一共分为两个部分:Map处理部分,Reduce分析部分,在进行数据分析之前必须要对数据进行合理的处理,而后才可以做统计分析操作。
范例:MapReduce基础模型
package org.lks.demo;
import java.util.ArrayList;
import java.util.DoubleSummaryStatistics;
import java.util.List;
public class JavaReflectDemo {
public static void main(String[] args) {
List<Order> list = new ArrayList<Order>();
list.add(new Order("Java", 1.9, 10));
list.add(new Order("JSP", 3.7, 100));
list.add(new Order("JavaScript", 8.0, 12130));
list.add(new Order("Json", 1.5, 1320));
list.add(new Order("JJ", 1325.23, 34));
list.add(new Order("Python", 1.23, 123340));
//分析购买商品中带有“j”的数据信息,并且进行商品单价和数量的处理,随后汇总分析
DoubleSummaryStatistics stat = list.stream().filter((ele)->ele.getName().toLowerCase().contains("j")).mapToDouble((ele)->ele.getPrice() * ele.getAmount()).summaryStatistics();
System.out.println(stat.getCount());
System.out.println(stat.getSum());
System.out.println(stat.getAverage());
System.out.println(stat.getMax());
System.out.println(stat.getMin());
}
}
class Order{
private String name;
private double price;
private long amount;
public Order() {}
public Order(String name, double price, long amount) {
this.name = name;
this.price = price;
this.amount = amount;
}
public String getName() {
return this.name;
}
public double getPrice() {
return this.price;
}
public long getAmount() {
return this.amount;
}
}
这些分析操作只是JDK本身提供的支持,而实际之中,肯定不可能这样进行,因为所有的数据如果都保存在内存里面,那么面对于大数据的环境,就崩了。