可用理解stream流也是一个集合,利用流(这个集合)的方法可以处理集合里面元素。比如:选出集合中最大的元素【max()】、统计集合有多少个元素【count()】、过滤掉一些元素【filter()】等。
(一)获取对象获取stream对象有一下几种方法
//1. 调用Arrays的方法静态方法stream()
String[] arr = {"1", "2", "3","c","c"};
Stream stream = Arrays.stream(arr);
//2.直接获取,注意Stream是一个接口,of()方法是一个接口里面有方法体的方法
Stream stream1 = Stream.of("a", "b", "c");
// 3. Map,获取entrySet调用stream方法
Map map = new HashMap<>();
map.put(1, "a");
map.put(2, "b");
map.put(3, "c");
Stream> stream2 = map.entrySet().stream();
//4.获取文件的stream流
try {
Stream lines = Files.lines(Paths.get("文件路径名"), Charset.defaultCharset());
} catch (IOException e) {
e.printStackTrace();
}
(二)操作方法
有了对象之后就能调用方法。
stream 对象为我们提供了很对操作集合的方法。具体方法的使用可以参考文档。
Lambda表达式用得最多的就是匿名子类。它可以简化匿名子类的编写。
以最常见的Runnable接口举例。
- 先理解匿名对象
//一般对象
String a = new String("123");
//像这个就是匿名对象(没有名字,只能使用一次)
new String("123");
//使用匿名对象
new String("123").equals("123"); //结果为ture
- 匿名子类(没有名字的子类)
- 有名字的子类,名字是LambdaTest
public class LambdaTest implements Runnable {
@Override
public void run() {
}
}
- 匿名子类(这个类只能使用一次)
//创建了一个匿名子类,并且使用这个类new了一个匿名对象
new Runnable() {
@Override
public void run() {
System.out.println("123");
}
};
(二)Lambda表达式式
- 无参数
//创建一个线程
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("123");
}
}).start();
//同样创建了一个线程
new Thread(()-> System.out.println("123")).start();
输出:
上面两个线程的功能是一致的,也就是使用Lambda表达式简写了创建线程的过程。
()-> System.out.println("123")
等价于
@Override
public void run() {
System.out.println("123");
}
}
- 有参数
long c = Arrays.stream(arr).filter(a -> {
return a.equals("c");
}).count();
System.out.println(c);
long c1 = Arrays.stream(arr).filter(new Predicate() {
@Override
public boolean test(String s) {
return s.equals("c");
}
}).count();
System.out.println(c1);



