概述
Stream流是为了简化常规集合的操作。
流相当于“流水线”。
代码演示
```java
package com.heima.stream;
import java.util.*;
import java.util.function.Predicate;
import java.util.stream.Stream;
public class StreamDemo {
public static void main(String[] args) {
//获取集合的流
ArrayList<String> list = new ArrayList<>();
Stream<String> stream = list.stream();
//获取set的流
HashSet<String> set = new HashSet<>();
Stream<String> stream1 = set.stream();
//获取数组的流,使用Stream.of方法,传入参数为包装类型数组
Integer[] arr = {11,22,33,44};
Stream<Integer> arr1 = Stream.of(arr);
//获取map的流,分别获取键的流和值的流
HashMap<String, Integer> map = new HashMap<>();
Set<String> strings = map.keySet();
Stream<String> stringStream = strings.stream();
Collection<Integer> values = map.values();
Stream<Integer> valuesStream = values.stream();
//给集合加点数据
Collections.addAll(list,"abc","def","qwer","asd","123");
//以下演示均以集合list的流stream作为演示
//终结方法只能使用一次就会关流,同一个流使用时注释其他带有终结方法的语句
//终结方法forEach:逐一遍历并打印
stream.forEach(System.out::println);
//终结方法count:统计个数
System.out.println(stream.count());
//filter筛选,留下包含a的字符串,filter需要一个Predicate函数接口类型的对象作为参数
stream.filter(new Predicate<String>() {
//使用匿名内部类
@Override
public boolean test(String s) {
return s.contains("a");
}
}).forEach(System.out::println);
//结果:abc asd
//limit():取用前几个
stream.limit(3).forEach(System.out::println);
//结果:"abc","def","qwer"
//skip():跳过前几个
stream.skip(2).forEach((s)-> System.out.println());
//结果:"qwer","asd","123"
//map(): 映射方法(把元素进行转换)
//把流中的元素从【字符串】转成【字符串对应的长度】
stream.map(s->s.length()).forEach(s-> System.out.println(s));
//结果:3,3,4,3,3
//static concat():组合(把两个流拼接成一个流),静态方法直接使用类名调用方法
//截取原有的stream作为两个新流
Stream<String> s1 =list.stream().skip(3);
Stream<String> s2 =list.stream().limit(2);
//组合两个新流并打印
Stream.concat(s1, s2).forEach(s-> System.out.println(s));
//结果:"asd","123","abc","def"
}
}