昨天复习了一下java新特性stream流的知识,今天记录一下笔记,下次看的时候就不用重复复习啦。
一、是什么
在Java 8中,得益于Lambda所带来的函数式编程, 引入了一个全新的Stream流概念。
Stream流的主要目的:
用于简化集合和数组操作的API。
Stream流的作用是什么,结合了什么技术?
简化集合、数组操作的API。结合了Lambda表达式。
说说Stream流的思想和使用步骤。
- 先得到集合或者数组的Stream流(就是一根传送带)。
- 把元素放上去。
- 然后就用这个Stream流简化的API来方便的操作元素。
二、获取流的方式
Stream操作集合或者数组的第一步是先得到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流 |
三、常用方法
Stream流的常用API(中间操作方法)
名称 | 说明 |
---|---|
Stream<T> filter(Predicate<? super T> predicate) | 用于对流中的数据进行过滤。 |
Stream<T> limit(long maxSize) | 获取前几个元素 |
Stream<T> skip(long n) | 跳过前几个元素 |
Stream<T> distinct() | 去除流中重复的元素。依赖(hashCode和equals方法) |
static <T> Stream<T> concat(Stream a, Stream b) | 合并a和b两个流为一个流 |
注意:
中间方法也称为非终结方法,调用完成后返回新的Stream流可以继续使用,支持链式编程。
在Stream流中无法直接修改集合、数组中的数据。
Stream流的常见终结操作方法
名称 | 说明 |
---|---|
void forEach(Consumer action) | 对此流的每个元素执行遍历操作 |
long count() | 返回此流中的元素数 |
注意:终结操作方法,调用完成后流就无法继续使用了,原因是不会返回Stream了。
2种方法的区别:
终结和非终结方法的含义是什么?
终结方法后流不可以继续使用,非终结方法会返回新的流,支持链式编程。
四、案例测试
常用API
创建一个集合
代码语言:javascript复制//创建一个集合,存储多个字符串元素
ArrayList<String> list = new ArrayList<String>();
list.add("林青霞");
list.add("张曼玉");
list.add("王祖贤");
list.add("柳岩");
list.add("张敏");
list.add("张无忌");
输出所有以"张"开头的元素
代码语言:javascript复制list.stream().filter(s -> s.startsWith("张")).forEach(System.out::println);
常见终结操作方法
代码语言:javascript复制//需求1:把集合中的元素在控制台输出
list.stream().forEach(System.out::println);
System.out.println("-----------统计集合中有几个以张开头的元素--------------------");
//需求2:统计集合中有几个以张开头的元素,并把统计结果在控制台输出
long count = list.stream().filter(s -> s.startsWith("张")).count();
System.out.println(count);
完!下次还需要记录的话,还会修改这个文章。
腾云先锋(TDP,Tencent Cloud Developer Pioneer)是腾讯云GTS官方组建并运营的技术开发者群体。这里有最专业的开发者&客户,能与产品人员亲密接触,专有的问题&需求反馈渠道,有一群志同道合的兄弟姐妹。来加入属于我们开发者的社群吧!