Stream API
Stream API是什么?
Stream API是Java8类库的核心,它能够应用在一组元素上一次执行的操作序列。Stream操作分为中间操作(StatelessOP、StatefulOP)或者最终操作(TerminalOP)两种,最终操作返回一特定类型的计算结果,而中间操作返回Stream本身,这样你我们就可以将多个操作串起来。 使用Stream的时候需要指定一个数据源,它包括List, Set等集合类。
Stream 是对集合(Collection)对象功能的增强,它专注于对集合对象进行各种非常便利、高效的聚合操作(aggregate operation),或者大批量数据操作 (bulk data operation)。Stream API 借助于同样新出现的 Lambda 表达式,极大的提高编程效率和程序可读性。同时它提供串行和并行两种模式进行汇聚操作,并发模式能够充分利用多核处理器的优势,使用 fork/join 并行方式来拆分任务和加速处理过程。通常编写并行代码很难而且容易出错, 但使用 Stream API 无需编写一行多线程的代码,就可以很方便地写出高性能的并发程序。
简单使用:
一个简单的例子:
List<String> test = new ArrayList<>();
test.add("ABC");
test.add("ABC");
test.add("DEF");
test.add("");
List<String> result = test.stream()
.distinct()
.filter("ABC"::equals)
.map(String::toLowerCase)
.collect(Collectors.toList());
System.out.println(result);
得到结果是:
例子中只用到了fileter、map和collect,distinct去除了集合中的重复值,fileter过滤了集合中不等于”ABC”的值,map将每一个值做toLowerCase操作,最终collect操作作为最终操作,返回了最终处理后的结果。
从StatelessOP 、 StatefulOP 和 TerminalOP开始
上面的例子包含了恰好包含了三种操作,具体Stream中的其他操作的类型分类如下:
Stream操作分类 | 中间操作 |
---|---|
无状态(StatelessOP) | unordered(),filter(),map(),mapToInt(),mapToLong(),mapToDouble(), flatMap(),flatMapToInt(),flatMapToLong(),flatMapToDouble(),peek() |
有状态(StatefulOP) | distinct(),sorted(),limit(),skip() |
最终操作(TerminalOP) |