介绍
"Stream流"通常指的是数据流(Data Stream),在计算机科学中是指一系列连续的数据元素,以流的形式传输。数据流可以是输入数据流(Input Stream)或输出数据流(Output Stream),常见的应用包括网络数据传输、文件读写操作等。在编程中,利用流的概念可以方便地处理大量的数据,实现数据的分块传输和处理。
Stream流
流
流水线
先得到流水线 把数据都放上面去
在利用stream流中的API进行操作
使用stream流
用集合去调用stream()方法
获得流水线 并把集合里面的数据放到流水线上
我们这边是使用链式编程的思想
双列集合
数组
零散数据
Stream流里的静态方法of
方法的形参是一个可变参数,可以传递一堆零散的数据,也可以传递数组
但是数组必须是引用数据类型
如果传递基本数据类型,是会把整个数组当做一个元素放到Stream里
我们要做的是把数据放到Stream流里
中间方法
过滤 *
注意
stream流关闭后不可再使用
所以优先使用链式编程的思想
获取前几个元素
跳过前几个元素
实例操作
import java.util.Collections;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
ArrayList<String>list=new ArrayList<>();
Collections.addAll(list,"张无忌","周正若","赵敏","张强",
"张三丰","张翠山","张良","王二麻子","谢广坤");
list.stream()
.skip(3)
.filter(s ->s.startsWith("张"))
.forEach(s -> System.out.println(s));
//"张强","张三丰","张翠山","张良"
}
}
import java.util.Collections;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
ArrayList<String>list=new ArrayList<>();
Collections.addAll(list,"张无忌","周正若","赵敏","张强",
"张三丰","张翠山","张良","王二麻子","谢广坤");
list.stream()
.skip(3)
.limit(4)
.forEach(s -> System.out.println(s));
//"张强","张三丰","张翠山","张良"
}
}
去重
合并
转换流里面的数据类型
如图使用map方法
当map方法执行完毕之后,流上的数据就变成了整数
所以在下面的forEach当中
s依次表示流里面的每一个数据
上述代码等价于
终结方法
终结方法是流里面的最后一步
之后就不能在使用流里面的其他方法了
上述代码等价于
收集方法Collect
收集流中的数据,放到集合中
import java.util.Collections;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
ArrayList<String> list=new ArrayList<>();
Collections.addAll(list,"张无忌-男-25",
"周正若-女-14","赵敏-女-13","张强-男-20");
List<String> man=list.stream()
.filter(s ->"男".equals(s.split("-")[1]))
.collect(Collectors.toList());
System.out.println(man);
Set<String> woman=list.stream()
.filter(s ->"女".equals(s.split("-")[1]))
.collect(Collectors.toSet());
}
}
搜集到HashSet集合里面时
会去掉重复的元素
收集使用了collect这个方法
当收集到Map双列集合里的时候
键和值的规则要分别书写
收集到Map集合中,键是不能重复的
不然就会报错
完整版
转换成Lambda表达式
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
ArrayList<String> list=new ArrayList<>();
Collections.addAll(list,"张无忌-男-25",
"周正若-女-14","赵敏-女-13","张强-男-20");
Map<String,Integer>map=list.stream()
.filter(s ->"男".equals(s.split("-")[1]))
.collect(Collectors.toMap(
s ->s.split("-")[0],
s ->Integer.parseInt(s.split("-")[2])));
System.out.println(map);
}
}