- 函数式接口:如果一个接口中只声明了一个抽象方法,则此接口称为函数式接口
- 我们可以在函数式接口上添加注解@FunctionInterface来检验该接口是否是函数式接口
- Java8 为我们提供了丰富的函数式接口,其中四大核心(Consumer,supplier,Function,Predicate)
实际应用中Consumer、Predicate两个接口使用的比较多,均可采用函数式编程 - 方法应用和构造器引用
使用格式===>类(对象)::方法名
具体分为三种:
对象::非静态方法
类::静态方法
类::非静态方法
- Java新特性之二-------Stream API
Stream和Collection之间区别
| Collection:是一种静态的内存数据结构,主要面向内存的
| Stream:是有关计算的,主要面向的是计算Stream解释
| 一个中间操作链,对数据源的数据进行处理
| 一旦执行中间操作,就会产生结果,之后便不会在被使用Stream使用
| 集合转变为stream
* 集合.stream() ===>返回的是一个顺序流
* 集合.parallelStream() ===>返回的是一个并行流
* 顺序流和并行流的区别类似于linkedhashmap和hashmap的区别,并行流的效率要高于顺序流
| 数组转变为stream
使用Arrays.stream() 方法将数组转变为流
| 使用Stream.of() ==>静态方法来转变为流
eg: Stream.of(1,2,3).forEach(System.out::println);
| 创建无限流
* Stream.iterate()
* Stream.generate()
| StreamAPI中强大的筛选和切片
* filter(Predicate p)
* limit(Integer n) ===> 截取给定数量的元素
* skip(Integer n) ===> 顺序流,跳过前n个元素
* distinct() ===>根据元素的hashcode和equals方法来去重
| StreamAPI中的映射
* map ===>将流中的元素按照颐一定规则映射出来
* flatMap ===>解决的是嵌套的元素,会将所有元素打开形成一个个元素,然后将这些元素重新组合成新的流
* 理解一下二者之间的区别!!!