Java初学者笔记-06、Stream流
什么是Stream流
JDK8开始新增的一套API,可以用于链式操作集合或者数组的数据。
优势: Stream流大量的结合了Lambda的语法风格来编程,功能强大,性能高效,代码简洁,可读性好。
list.stream().filter(s -> s.startswith("张")).filter(s -> s.Length() == 3).collect(Collectors.toList());
使用Stream流
- 获取Stream流。(开启)
- 调用流水线的各种操作。(处理)
- 获取处理的结果。(终结)
获取Stream流(开启)
// 集合 // default Stream <E> stream() List<String> list = new ArrayList<>(); list.stream(); // =============== // 数组 // public static <T> Stream<T> stream(T[] array) // public static <T> Stream<T> of(T... values) String[] names = {"1","2","3"}; Arrays.stream(names); // 或者 Stream.of(names);
扩展:可变参数
public static <T> Stream<T> of(T... values)
- 三个点代表可变参数,
数据类型…参数名称
,可以匹配多个参数或者一个数组。 - 可变参数在形参列表中只能有一个,且可变参数必须放在形参列表的最后面。
- 可变参数对内实际上就是一个数组。下面中nums就是数组。
public static void sum(int age, int...nums){ System.out.println(nums.Length); System.out.println(Arrays.toString(nums)); }
- 可以不传数据给可变参数;也可以传一个或者同时传多个数据给它。常常用它来灵活地接收数据。
Stream流的常用中间方法
中间方法:用完方法返回一个新流,继续链式编程。
Stream提供的常用中间方法 | 说明 |
---|---|
Stream |
用于对流中的数据进行过滤 |
Stream |
对元素进行升序排序 |
Stream |
按照指定规则排序 |
Stream |
获取前几个元素 |
Stream |
跳过前几个元素 |
Stream |
去除流中重复的元素 |
对元素进行加工,并返回对应的新流 | |
static |
合并a和b两个流为一个流 |
其中,map方法是映射加工方法,把流上原来的数据拿出来变成新数据又放到流上去。 |
scores.stream().sorted().forEach(System.out::println); scores.stream().sorted((s1,s2) -> Double.compare(s2,s1)).forEach(System.out::println); scores.stream().sorted((s1, s2) -> Double.compare(s2, s1)).limit(2).forEach(System.out::println);// 取前两名 scores.stream().sorted((s1, s2) -> Double.compare(s2, s1)).skip(2);// 跳过前两名 scores.stream().map(s -> "加10分后:" + (s +10)).forEach(System.out::println);// 每人加10分
Stream流的常用终结方法
终结方法指的是调用完成后,不会返回新Stream了,没法继续使用流了。
流只能用一次!终结后就不能用了。
Stream提供的常用终结方法 | 说明 |
---|---|
void forEach(Consumer action) | 对此流运算后的元素执行遍历 |
long count() | 统计此流运算后的元素个数 |
Optional |
获取此流运算后的最大值元素 |
Optional |
获取此流运算后的最小值元素 |
注意:max,min返回的是Optional对象,需要使用
.get()
获取这个对象。
Stream流的收集
就是把Stream流操作后的结果转回到集合或者数组中去返回。
list.stream().filter(s -> s.startsWith("3k")).collect(Collector.toList());
Stream提供的常用终结方法 | 说明 |
---|---|
R collect(Collector collector) | 把流处理后的结果收集到一个指定的集合中去 |
Object[] toArray() | 把流处理后的结果收集到一个数组中去 |
Collectors工具类提供了具体的收集方式 | 说明 |
---|---|
public static |
把元素收集到List集合中 |
public static |
把元素收集到Set集合中 |
public static Collector toMap(Function keyMapper , Function valueMapper) | 把元素收集到Map集合中 |
本文作者:subeipo
本文链接:https://www.cnblogs.com/subeipo/p/18679782/java-chu-xue-zhe-bi-ji06stream-liu
版权声明:本作品采用署名—非商业性使用—相同方式共享 4.0 协议许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步