Java8——Stream流
我们先上手个小demo
1 | import java.util.Arrays; |
Stream中集合的处理方案
这张图展示了过滤、映射、跳过、计数等多步操作,这是一个集合元素的处理方案,也就是一种函数模型
中间执行过程中集合并不会真正的被处理,而是到最后count
的时候才会被执行,这就是函数模型的操作,而之所以这样的得益于Lambda的延迟加载
Stream流获取
Stream流获取有两种方式
- Collection的有stream()方法获取stream流
1 | import java.util.*; |
- 有一个Java.util.stream有一个静态方法of也可以获得stream流
1 | public static void main(String[] args) { |
Stream方法的学习总结
首先分成两类
- 延迟方法
- 终结方法
foreach()方法 —— 终结方法
遍历之后就不能使用stream流中的其他方法1
2
3
4
5
6
7
8import java.util.stream.Stream;
public class ForStream {
public static void main(String[] args) {
Stream.of("李茂展","李沫熙","杨宁宁").forEach(name-> System.out.println(name));
}
}
filter()方法 —— 延迟方法
执行过滤之后,仍然可以使用stream的其他方法1
Stream.of("李茂展","李沫熙","杨宁宁").filter(name->name.contains("李")).forEach(name-> System.out.println(name));
类名引用静态方法的使用
我们使用Math.abs()来求绝对值
首先我们创建一个函数式接口1
2
3
4
public interface AbsFunc {
public abstract int myAbs(int num);
}
然后我们可以使用lambda表达式来引用Math的静态方法1
2
3
4
5
6
7
8
9
10
11
12
13public class DemoStream {
public static void getAbs(Integer num,AbsFunc absFunc){
int myAbs = absFunc.myAbs(num);
System.out.println(myAbs);
}
public static void main(String[] args) {
getAbs(-10,Math::abs);
}
}
结构打印出来是 10
同样的使用super引用父类方法的时候,由于在子类中super是存在的,在lambda中我们可以使用super::show
来完成调用
同样的使用this的时候,在lambda中我们可以使用this::show
来完成调用
同样的使用new的时候,在lambda中我们可以使用Person::new
来完成调用