您的位置:首页 > 编程语言 > Java开发

Java8特性Stream

2019-04-19 23:56 113 查看

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());

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: