Stream
类似用SQL语句从数据库查询数据的直观方式来提供一种对Java集合运算和表达的高阶抽象
风格将要处理的元素集合看作一种流,流在管道中传输,并且可以在管道的节点上进行处理,比如筛选,排序,聚合等。
元素流在管道中经过中间操作(intermediate operation)的处理,最后由最终操作(terminal operation)得到前面处理的结果。
数据源
:流的来源。可以是集合,数组,I/O channel,产生器generator等。
聚合操作
: 类似SQL语句一样的操作,比如filter, map, reduce, find,match, sorted等。
Pipelining::中间操作都会返回流对象本身。这样多个操作可以串联成一个管道,如同流式风格(fluent style)。这样做可以对操作进行优化,比如延迟执行(laziness)和短路( short-circuiting)。
public static void main(String[] args) { List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd", "", "jkl"); List<String> filtered=strings.stream().filter(string->!string.isEmpty()).collect(collectors.tolist()); }
foreach
迭代流中的每个数据
foreach(sout);
map
List<Integer> numbers=Arrays.asList(12,2,3,4); //获取对应的平方数 List<Integer> squareList=numbers.stream().map(i->i*i).distinct().collect(collectors.toList());
collectors
实现了很多归约操作,将流转换成集合和聚合元素