热门课程

免费试听

上课方式

开班时间

当前位置: 首页 -   文章 -   根域文章 -   正文

Java8 Stream流介绍

zhiliaoadmin
2022-01-31 10:00:00
0

前言:目前Java8新特性在很多公司已经流行起来了,除非很老的公司还在用Java7,所以学习Java8是非常有必要的。

Stream是Java8中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。

简而言之StreamAPI提供了一种高效且易于使用的处理数据的方式。

2、Stream流式思想概述

注意: Stream流和IO流没有任何关系,请暂时忘记对传统IO流的固有影响! Stream流思想类似于工厂车间的”生产流水线”,Stream流不是一种数据结构,不保存数据,而是对数据进行加工处理,Stream可以看作是流水线上的一个工序;在流水线上,通过多个工序让一个原材料加工成一个商品

lambda表达式对接口的要求:

虽然可以使用lambda表达式对某些接口进行简单的实现,但是并不是所有的接口都可以使用Lambda表达式来实现。要求接口中定义的必须要实现的抽象方法只能是一个。

四大内置函数

类型抽象方法
消费型接口Consumer<T>void accept(T t)
供给型接口Supplier<T>T get();
函数型接口Function<T,R>R app1y(T t)
断言型接口Predicate<T>boolean test(T t)

2.1、流程

1.第一步:把集合转换为流stream
2.第二步:操作stream流stream流在管道中经过中间操作(intermediate operation)的处理,最后由最终操作(terminal)operation 得到前面处理的结果

2.2、特点

1.代码简洁:函数式编程编写出的代码简洁且意图明确,使用stream接口让你从此告别for循环

2.多核友好:Java 函数式编程使得编写并行程序从未如此简单,你需要的全部就是调用一下方法

2.3、操作符

两种:中间操作符、终止操作符

2.4、中操作符

流方法示例
filter用于通过设置的条件过滤出元素
dustinct返回一个元素各异(根据流所生成元素的hashCode 和equals方法实现)的流
limit会返回一个不超过给定长度的流
skip返回一个扔掉了前n个元素的流
map接收一个函数作为参数。这个函数会被应用到每一个元素上,并将其映射成一个新的元素(使用映射一词,是因为他和转换类似,但其中的细微差别在于它是创建一个新版本而不是去修改)
flatMap使用flatMap方法的效果是,各个数组并不是分别映射成一个流,而是映射成流的内容。所有使用map(Arrays::stream)时生成的单个流都被合并起来,即扁平化为一个流
sorted返回排序后的流

3、注意事项:

1.Stream只能操作一次 2.Stream方法返的是新的流 3.Stream不调用终结方法,中间的操作不会执行

4、例子

Stream更加优雅的解决方案:

public static void main(String[] args) {
       // 定义一个list集合
       List<String> list = Arrays.asList("123", "1245", "4643", "748188", "543637", "12567788");
       // 1.获取所有带1的信息
       // 2.获取所有长度为4的信息
       list.stream().filter(a -> a.indexOf("1") > -1).filter(a -> a.length() == 4).forEach(a -> System.out.println(a));
       System.out.println("****************************************");
       list.stream().filter(a -> a.indexOf("1") > -1).filter(a -> a.length() == 4).forEach(System.out::println);
   }

如今JDK17已于2021年9月份发布了,我相信还是很多公司没有提前去升级java版本,Java8依然是目前主流的版本,即是升级到最新版本,依然也是能够沿用Java8新特性的。


大家都在看

IDC机房物理设备与环境安全管理

2022-01-31 浏览次数:0

2024届秋招信息汇总,全都是大厂!!!

2022-01-31 浏览次数:0

计算机毕业,从售后客服到安全运维,他是如何从头再...

2022-01-31 浏览次数:0

信安72部、Java73部开班,加油新学员!

2022-01-31 浏览次数:0

服务器是啥?服务器可以用来干什么

2022-01-31 浏览次数:0

网络渗透是什么意思?学网络渗透有什么用?

2022-01-31 浏览次数:0
最新资讯
Java8 Stream流介绍 目前Java8新特性在很多公司已经流行起来了,除非很老的公司还在用Java7,所以学习Java8是非...