Stream流的作用:结合了Lambda表达式,简化集合、数组的操作
Stream流的使用步骤:
①先得到一条Stream流(流水线),并把数据放上去
(图片来自哔站黑马程序员)
②利用Stream流中的API进行各种操作
过滤 转换:中间方法:方法调用完毕后,还可以调用其他方法
统计 打印:终结方法:最后一步,调用完毕之后,不能调用其他方法
1.单列集合代码演示:
package a08mystream;
import java.util.ArrayList;
import java.util.Collections;
public class StreamDemo1 {
public static void main(String[] args) {
//1.单列集合获取Stream流
ArrayList<String> list = new ArrayList<>();
Collections.addAll(list,"a","b","c","d","e");
/* //获取到一条流水线,并把集合中的数据放到流水线上
Stream<String> stream1 = list.stream();
//使用终结方法打印流水线上的数据
stream1.forEach(new Consumer<String>() {
@Override
public void accept(String s) {
//s依次表示流水线上的每一个数据
System.out.println(s);
}
});*/
list.stream().forEach(s-> System.out.println(s));
}
}
运行结果:
2.双列集合(无法直接获取,需要通过keySet或entrySet中转)代码演示:
package a08mystream;
import java.util.HashMap;
public class StreamDemo2 {
public static void main(String[] args) {
//双列集合
HashMap<String,Integer> hm=new HashMap<>();
//HashMap是基于哈希表的,所以不能保证存和取的顺序一样
//2.添加数据
hm.put("aaa",111);
hm.put("bbb",222);
hm.put("ccc",333);
hm.put("ddd",444);
//3.第一种获取Stream流(把键放到流水线上)
hm.keySet().stream().forEach(s-> System.out.println(s));//s依次表示每一个键
//4.第二种获取Stream流(获取所有键值对对象放到流当中)
hm.entrySet().stream().forEach(s-> System.out.println(s));//s依次表示每一个键值对
}
}
运行结果:
3.数组代码演示
package a08mystream;
import java.util.Arrays;
public class StreamDemo3 {
public static void main(String[] args) {
//数组
//1.创建数组
int[] arr={1,2,3,4,5};
String[] arr2={"a","b","c"};
//2.获取stream流
Arrays.stream(arr).forEach(s-> System.out.println(s));
System.out.println("-------------");
Arrays.stream(arr2).forEach(s-> System.out.println(s));
}
}
运行结果:
4.一堆零散数据(必须是同种数据类型)代码演示
package a08mystream;
import java.util.stream.Stream;
public class StreamDemo4 {
public static void main(String[] args) {
//一堆零散数据,必须是同种数据类型
Stream.of(1,2,3,4,5).forEach(s-> System.out.println(s));
Stream.of("a","b","c","d","e").forEach(s-> System.out.println(s));
}
}
运行结果:
stream接口中静态方法of的细节:
方法的形参是一个可变参数,可以传递一些零散的数据,也可以传递数组
但是数组必须是引用数据类型的,如果传递基本数据类型,是会把整个数组当做一个元素,放到stream中。