stream流可以看成一种高级的iteror
她有以下几个特性:
1.惰式执行:中间操作只会生成标记,结束操作会触发实际计算,计算发生时会把所有中间操作积攒的操作以pipeline
的方式执行,这样可以减少迭代次数。计算完成之后stream就会失效。
也就是说stream上的操作并不会立即执行,只有等到用户真正需要结果的时候才会执行。
2.无存储:stream不是一种数据结构,它只是某种数据源的一个视图,
数据源可以是一个数组,Java容器或I/O channel等。
3.为函数式编程而生:对stream的任何修改都不会修改背后的数据源,比如对stream执行过滤操作
并不会删除被过滤的元素,而是会产生一个不包含被过滤元素的新stream。
4.可消费性:stream只能被“消费”一次,一旦遍历过就会失效,就像容器的迭代器那样,想要再次遍历必须重新生成。
使用:获取流及流的使用
在这里插入图片描述
测试数据:List<User> list=new ArrayList<>();
遍历:forEach()
lambda: list.forEach(user -> System.out,println(user))
stream流: list.stream().forEach(user -> System.out,println(user))
排序:sort()
常规方式:
Collections.sort(list, new Comparator<User>() {
@Override
public int compare(User o1, User o2) {
return o1.getAge().compareTo(o2.getAge());}});
for (User user : list) {System.out.println(user);}
stream流:list.stream().sorted(Comparator.comparing(User::getAge)).
forEach(user -> System.out.println(user))
过滤:filter()
stream流:list.stream().filter((User user) -> user.getAge() > 50).
forEach(user -> System.out.println(user));
截断:limit()
list.stream().limit(3).forEach(user -> System.out.println(user));
跳过元素(跳过集合前3个元素):skip()
list.stream().skip(3).forEach(user -> System.out.println(user));
stream流作为jdk8之后的新特性,在对数据的操作上更便利更简洁,但可读性较差;熟悉手用起来还是很棒的。
网友评论