Stream流
Stream流的作用
- 结合了Lambda表达式,简化集合、数组的操作
Stream流的使用步骤
- 先得到一条stream流(流水线),并把数据放上去
- 利用Stream流中的API进行各种操作
- 分为中间方法和终结方法。中间方法调用完毕后还可以调用其他方法、终结方法调用完毕后不能再调用其他方法。
中间方法 | 终结方法 |
---|---|
过滤 | 统计 |
转换 | 打印 |
1 获取Stream流
defualt Stream<E> stream() //Collection中的默认方法
无,可以转成单列集合后获取 //双列集合
public static <T> Stream<T> stream(T[] array) //Arrays工具类中的静态方法
public static<T> Stream<T> of(T...values) //Stream接口中的静态方法,用于零散数据
2 中间方法
- 返回新的Stream流,原来的Stream流只能使用一次,建议使用链式编程
- 修改Stream流中的数据,不会影响原理数组或集合中的数据
Stream<T> filter(Predicate<? super T> predicate) //过滤
Stream<T> limit(long maxSize)
//获取前几个元素
Stream<T> skip(long n) //跳过前几个元素
Stream<T> distinct() //元素去重(依赖hashCode和equals方法)(底层利用hashSet去重)
static<T> Stream<T> concat(Stream a,Stream b) //合并a和b为一个流
Stream<R> map(Founction<T,R> mapper) //转换流中的数据类型
3 终结方法
- 终结方法返回值不为Stream对象
void forEach(Consumer action) //遍历
long count() //统计
toArray() //收集数据放到数组中,需创建函数式接口实例
collect(Collector collector) //收集数据放到集合中
collect(Collectors.toList/toSet/toMap)
*高级流
- 缓冲流
- 字节缓冲流
- BufferedInputStream
- BufferedOutputStream
- 字符缓冲流
- BufferedReader
- BufferedWriter
- 字节缓冲流
- 转换流
- 序列化流
- 打印流
- 压缩流
- commons-io
1 缓冲流
1.1 字节缓冲流
把基本流包装成高级流,提高读取数据的性能,干活的还是基本流。
原理:底层自带了长度为8192的缓冲区
public BufferedInputStream(InputStream is)
public BufferedOutputStream(OutputStream os)