00 33Java高级之Stream数据流

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本身提供的支持,而实际之中,肯定不可能这样进行,因为所有的数据如果都保存在内存里面,那么面对于大数据的环境,就崩了。

发布了122 篇原创文章 · 获赞 11 · 访问量 4215

猜你喜欢

转载自blog.csdn.net/weixin_43762330/article/details/104771106
00