目的:用于简化集合和数组操作的API.结合了Lambda表达式。
Stream流的思想和使用步骤:
先得到集合或者或者数组的stream流(就是一根传送带)
把元素放上去。
然后就用这个Stream流简化的API来方便的操作元素。
获取Stream流
集合获取Stream流的方式
可以使用Collection接口中的默认方法stream()生成流
default Stream<E>stream()
获取当前集合对象的Stream流
数组获取Stream流的方式
public static <T> Stream<T>stream(T[]array)
//获取当前数组的Stream流
public static <T>Stream<T>of(T...values)
//获取当前数组/可变数据的Stream流
Collection集合获取流
Collection <String>list=new Arraylist<>();
Stream <String> s=list.stream;
Map集合数据流
Map<String,Integer> maps=new HashMap<>();
//键流
Stream <String> keyStream=maps.keySet().stream();
//值流
Stream <Integer>valueStream=map.values().stream();
//键值对流
Stream<Map.Entry<String,Integer>>keyAndValueStream=map.entrySet().Stream();
3.数据获取流
String[] names={"赵敏","小昭","灭绝","周芷若"};
String<String> nameStream=Arrays.stream(names);
//或者Sream<String> nameStream=Stream.of(names);
Stream流的常用API(中间操作方法)
Stream<T> filter(Predicate<? super T> predicate)
//用于对流中的数据进行过滤
Stream<T> limit(long maxSize)//获取前几个元素
Stream<T> skip(long n)//跳过前几个元素
Stream<T> distinct()//去除流中重复的元素
static<T>Stream<T> concat (Stream a,Stream b)
//合并a和b两个流为一个流
注意:
中间方法也成为非终结方法,调用完成后返回新的Stream流可以继续使用,支持链式编程
在stream流中无法直接修改集合,数组中的数据
Stream流的常见终结操作方法
void forEach(Consumer action)
//对此流的每个元素执行遍历操作
long count()
//返回此流中的元素数
注意:
终结操作方法,调用完成后,流就无法使用了,原因时不会返回Stream了。
Sream流的收集操作
含义:就是把stream流操作后的结果数据转回到集合或者数组中去
Stream流的收集方法
R collect(Collector collector)//开始收集Stream流,指定收集器Collectors工具类提供了具体的收集方法
public static <T>Collector toList()//把元素收集到List集合中
public static <T>Collector toSet()//把元素收集到Set集合中
public static Collector toMap(Function keyMapper,Function valueMapper)//把元素收集到Map集合中