Java8特性Stream
Java8特性Stream
一、建立在lambda表达式之上
@FunctionalInterface的作用就是标识一个接口为函数式接口,此时Comparator里只能有一个抽象方法
1.0 -> 调用函数
2.2 :: 调用方法
lambda表达式的基本格式为(x1,x2)->{表达式…};
1.一个参数,方法可以省略参数的括号
2.表达式只有一行,那么表达式两边的花括号可以省略
3.对于没有参数的情况,参数的括号不能省略
格式语法详细:
1.2.1 多参数
(1). lambda表达式的基本格式为(x1,x2)->{表达式…};
(2). 在上式中,lambda表达式带有两个参数,此时参数类型可以省略,但两边的括号不能省略
(3). 如果表达式只有一行,那么表达式两边的花括号可以省略
1.2.2 无参数
(1).参数的括号不能省略,
(2).其他语法同多参数
对于一个参数的情况: (1).可以省略参数的括号和类型 (2).其他语法同多参数
2.2 使用方式
方法引用主要有如下三种使用情况
(1)类 ::实例方法
(2)类 ::静态方法
(3)对象::实例方法
其中后两种情况等同于提供方法参数的lambda表达式,
如 System.out::println 等同于(x)->System.out.println(x),
3.构造器引用
构造器引用的语法为 ClassName::new
4.自由变量的作用范围
表达式中的this指的是包含lambda表达式的类,而使用匿名内部类的方式,this指的是匿名内部类本身。
4.1 自由变量和闭包
1.参数内的变量,
2.lambda表达式中的内部变量,
3.自由变量,自由变量指的是在lambda表达式之外定义的变量。
二、Stream开始
Java中的Stream并不会存储元素,而是按需计算。
聚合操作 类似SQL语句一样的操作, 比如filter, map, reduce, find, match, sorted等。
parallelStream 是流并行处理程序的代替方法
forEach: 迭代流中的每个数据 //迭代作用
map 方法用于映射每个元素到对应的结果 //同时对每个元素操作,如取平方
filter 方法用于通过设置的条件过滤出元素 //过滤
limit 方法用于获取指定数量的流 //指定返回的个数
sorted 方法用于对流进行排序。 //排序 reverse逆序
collect //通过Collectors可用于返回列表或字符串
Collectors 类实现了很多归约操作,例如将流转换成集合和聚合元素。Collectors 可用于返回列表或字符串
统计:
主要int、double、long等基本类型上,产生统计结果的收集器
IntSummaryStatistics stats = numbers.stream().mapToInt((x) -> x).summaryStatistics();
System.out.println("列表中最大的数 : " + stats.getMax());
System.out.println("列表中最小的数 : " + stats.getMin());
System.out.println("所有数之和 : " + stats.getSum());
System.out.println("平均数 : " + stats.getAverage());
- JAVA8特性之STREAM
- Java 8新特性:新语法方法引用和Lambda表达式及全新的Stream API
- 详解Java8特性之Stream API补充
- 【小家java】java8新特性之---Stream API 详解 (Map-reduce、Collectors收集器、并行流)
- java新特性之stream
- java8新特性 --- stream(二)
- java8新特性 (λ、stream 与 默认接口方法)
- Java8特性详解 lambda表达式 Stream
- 这可能是史上最好的 Java8 新特性 Stream 流教程
- Java 8新特性:新语法方法引用和Lambda表达式及全新的Stream API
- Java8新特性二--Stream
- Java 8新特性:Stream API
- java8新特性-- stream
- 详解Java8特性之Stream API并行流
- java8新特性之stream
- java8新特性stream操作
- Java 8新特性:全新的Stream API
- Java8新特性--流(Stream)
- java8 新特性之 Stream()的使用。
- Java 8 新特性,Lambda,方法引用,Stream,Optional