从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集和里面保存这些订单的信息,肯定会有多个订单的信息存在。
来源:https://www.cnblogs.com/Tony98/p/10571030.html