一、Stream流
1.介绍:Stream是基于lambda表达式,针对于集合遍历的简化代码的一种写法(个人感觉)。
2.lambda表达式
lambda表示是针对于有且仅有一个接口的对象,将写法省略只保留传递的参数 -> 执行的代码
lambda表达式的使用前提:使用的对象实现了接口,且只有一个抽象方法
new Thread(new Runable() {
public void run(){
sout(“创建一个线程”);
}
}); //匿名内部类
new Thread(() -> {sout(“创建一个线程”)} ) //lambda表达式
lambda表达式就是将可以根据上下语境推断出的代码省略
因为Thread只继承了Runable接口,且内部只有一个run方法,所以不必再将Runable接口名
和run方法名写出。使用参数列表让人知道这是一个方法,且告诉别人这个方法的参数是什么
然后使用->指向要执行的代码代码使用{}包括,但是如果只有一行代码大括号也可以省略
3.获取流
(1)使用collection获取流
使用实现集合的.stream()方法
List list = new ArrayList();
Stream stream = list.stream();
补充:创建流的三种方式(1)通过集合创建(2)通过数组创建(3)通过流的静态方法of()创建
流的种类:(1)串行流
(2)并行流:多线程处理集合中的数据
4.常用方法
(1)延迟方法:返回值仍然是Stream类型,可以链式调用。stream.filter().count();只有调用终结方法后才会执行延迟方法
(2)终结方法:foreach(),count();除了终结方法都是延迟方法。使用终结方法后之后流会被消耗
这个流就不可再次被使用。
(3)forEach():对流中的数据逐一处理(最常见的遍历数据)
//创建一个集合
List list = Arrays.asList(“张三”,“李四”,“王二”);
//通过集合创建流
Stream stream = list.stream();
//使用forEach()方法遍历数据,两种写法
stream.forEach(name -> System.out.println(name));
stream.forEach(System.out::println);
(4)filter():增加条件过滤流中的数据
//找到所有姓张的名字
List list = Arrays.asList(“张三”,“王五”,“李四”,“张销售”);
Stream stream = list.stream();
stream.filter(name -> name.startsWith(“张”))
.forEach(System.out::println); //链式链接,过滤后将其打印
(5)map():映射,将流中的数据类型进行改变
List list = Arrays.asList(“1”,“2”,“3”,“4”);
Stream stream = list.stream();
stream.map(name -> Integer.parseInt(name))
.forEach(System.out::println);
(6)count():统计个数,与size()方法类似,获取流中的数据个数
List list = Arrays.asList(“1”,“2”,“3”,“4”);
Stream stream = list.stream();
System.out.print(stream.count());
(7)limit():限制个数,只保留流中前n个数据
List list = Arrays.asList(“1”,“2”,“3”,“4”);
Stream stream = list.stream();
stream.limit(3)
.forEach(System.out::println);
(8)skip():跳过流中前几个数据
List list = Arrays.asList(“1”,“2”,“3”,“4”);
Stream stream = list.stream();
stream.skip(3)
.forEach(System.out::println);
(9)concat():将两个流拼接为一个流
Stream stream1 = Stream.of(“1”,“3”);
Stream stream2 = Stream.of(“2”,“4”);
Stream concatStream = Stream.concat(stream1,stream2);
concatStream.forEach(System.out::println);
5.总结
基本学习后,发现流与数据库操作极其相似。是Java中对集合的数据进行筛选的一种的方式
可以通过极其简便的方法对集合的数据进行过滤(filter,如:找到集合中一些符合条件的数据)
可以通过limit对数据输出进行限制,可以通过skip跳过一些数据,可以使用concat将两个流进行拼接(类似关联表)
最终使用forEach对集合中的数据进行遍历操作(最简单的即为打印输出)
还可以使用map映射改变集合中的数据类型