博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java 8新特性:Stream API
阅读量:6156 次
发布时间:2019-06-21

本文共 2410 字,大约阅读时间需要 8 分钟。

hot3.png

Java 8新特性:Stream API 博客分类: java  

http://blog.csdn.net/sinat_30389651/article/details/50670827

Stream API

Stream API是Java8类库的核心,它能够应用在一组元素上一次执行的操作序列。

Stream操作分为中间操作或者最终操作两种,最终操作返回一特定类型的计算结果,而中间操作返回Stream本身,这样你我们就可以将多个操作串起来。

使用Stream的时候需要指定一个数据源,它包括List, Set等集合类。

Filter操作

Stream接口支持很多操作,Filter操作就是最常用的操作之一。在工程中,我们经常需要对一个集合进行过滤。以之前的排序数据为例:

List
words = new ArrayList<>();words.add(new SomeObject("test5"));words.add(new SomeObject("some0"));words.add(new SomeObject("another3"));words.add(new SomeObject("test1"));words.add(new SomeObject("some9"));words.add(new SomeObject("another2"));

我们需要过滤掉test的数据:

words.stream().filter((SomeObject someObject) -> !someObject.getSomething().startsWith("test")).forEach(System.out::println);

我们使用stream API中的filter函数,它使用了Predicate接口,它的抽象方法返回值是boolean。filter函数根据它的返回值判断该元素是否被过 滤掉。forEach方法表示将每个过滤后的每个元素依次执行指定操作。forEach方法使用的是Consumer接口,它的抽象方法表示在单个参数上 执行的参数。

Sort操作

Stream同样支持排序,我们可以指定Comparator函数式接口来让其按照自定义的方式进行排序:

final int plus = 1;words.stream().sorted((o1, o2) -> (o1.getSomething() + plus).compareTo(o2.getSomething())).forEach(System.out::println);

简单的一句话后排序就完成了,我们可以在之后进行后续操作或迭代输出。这个操作并不会影响原始数据,而是生成一个新的流供我们使用。

匹配

Stream支持多种匹配策略,这个操作会返回boolean告知我们匹配结果。

// 测试是否含有前缀为test的元素words.stream().anyMatch((s)->s.getSomething().startsWith("test"));// 测试是否每个元素前缀均为testwords.stream().allMatch((s)->s.getSomething().startsWith("test"));// 测试是否没有后缀为1的元素words.stream().noneMatch((s)->s.getSomething().endsWith("1"));

映射

中间操作map会将元素根据指定的Function接口来依次将元素转成另外的对象,下面的示例展示了将字符串转换为大写字符串。你也可以通过map来讲 对象转换成其他类型,map返回的Stream类型是根据你map传递进去的函数的返回值决定的。比如我们需要将SomeObject数组的每个元素的 something字段都变为大下颚。

words.stream().map(s -> s.getSomething().toUpperCase()).forEach(System.out::println);

计数和Reduce

除了按次序输出,我们也可以使用其他的最终操作。

计数是其中一个常见的操作,我们经常需要统计筛选出元素的个数,通过流接口,我们可以很轻松的完成:

words.stream().filter((SomeObject someObject) -> !someObject.getSomething().startsWith("test")).count();

Reduce也是一个很有意思的操作,它允许通过指定的函数来讲stream中的多个元素合并为一个元素,结果是通过Optional接口表示,

words.stream().filter((SomeObject someObject) -> !someObject.getSomething().startsWith("test")).reduce((o1, o2)->new SomeObject(o1.getSomething().concat(o2.getSomething())));

并行Stream

默认情况下Stream是在一个线程执行的。为了提高性能,我们也可以使用并行Stream。比如之前的filter操作,我们只要将其调用的stream方法改为parallelStream即可:

words.parallelStream().filter((SomeObject someObject) -> !someObject.getSomething().startsWith("test")).reduce(

转载于:https://my.oschina.net/xiaominmin/blog/1599650

你可能感兴趣的文章
AndroidStudio中导入SlidingMenu报错解决方案
查看>>
修改GRUB2背景图片
查看>>
Ajax异步
查看>>
好记性不如烂笔杆-android学习笔记<十六> switcher和gallery
查看>>
JAVA GC
查看>>
3springboot:springboot配置文件(外部配置加载顺序、自动配置原理,@Conditional)
查看>>
前端第七天
查看>>
图解SSH原理及两种登录方法
查看>>
【总结整理】JQuery基础学习---样式篇
查看>>
查询个人站点的文章、分类和标签查询
查看>>
基础知识:数字、字符串、列表 的类型及内置方法
查看>>
JSP的隐式对象
查看>>
JS图片跟着鼠标跑效果
查看>>
[SCOI2005][BZOJ 1084]最大子矩阵
查看>>
学习笔记之Data Visualization
查看>>
Leetcode 3. Longest Substring Without Repeating Characters
查看>>
416. Partition Equal Subset Sum
查看>>
app内部H5测试点总结
查看>>
[TC13761]Mutalisk
查看>>
while()
查看>>