Stream流
1. 体验Stream流
arrayList.stream().filter(s -> s.startWith("张")).filter(s -> s.length() == 3).forEach(System.out::println);
2. Stream流的生成方式
1.
- 生成流
- 通过数据源(数组,集合)生成流
- 例:list.Stream()
- 通过数据源(数组,集合)生成流
- 中间操作
- 一个流后可跟有零或多个中间操作,主要目的是打开流,做出某种程度的数据过滤 / 映射,然后返回一个新的流,交给下一个操作使用
- 终结操作
- 一个流只能有一个终结操作,当这个操作执行后,流就被使用”光”了,无法再被操作。
- 例:forEach()
- 一个流只能有一个终结操作,当这个操作执行后,流就被使用”光”了,无法再被操作。
2. Stream常见生成方式
- Collection体系的集合可以使用默认方法Stream()生成流
- default Stream< E > stream
- Map体系的集合间生成流 (调用方法:keySet(), values(), entrySet() )
- 数组可以通过Stream接口的静态方法 of (T…values)生成流 (Stream.of(数组))
3. Stream流常见中间操作方法
1. Stream<T> filter(Predicate predicate) : 用于流中数据的过滤
predicate接口的方法 boolean test(T t): 进行判断,返回一个boolean值
2. Stream<T> limit(long maxSize) : 截取指定参数个数的数据,返回此流中元素组成的流
3. Stream<T> skip(long n) : 跳过指定参数个数的数据,返回由该流剩余元素组成的流
4. static<T> Stream concat(Stream a, Stream b) : 合并a和b两个流为一个流 (静态方法)
5. stream<T> distict() : 返回由该流不同元素(根据Object.equals(Object)) 组成的流
6. Stream<T> sorted() : 根据自然顺序排序,返回由此流元素组成的流
7. Stream<T> sorted(Comparator comparator) : 根据提供的Comparator进行排序,返回由此流元素组成的流
8. Stream<T> sorted(Comparator comparator) : 返回由给定函数应用于此流的元素结果组成的流
Function接口中的方法 R apply(T t)
例子:list.stream().map(s -> Integer.valueOf(S)).forEach(System.out::println);
9. IntStream mapToInt(ToIntFunction mapper) : 返回一个IntStream其中包含 将给定函数应用于此流的结果
4. Stream流常见的终结操作方法
1. void forEach(Consumer action) : 对此流的每个元素进行操作
Consumer接口的方法 void accept(T t) : 对给定的参数操作
2. long count() : 返回此流中的元素数
5. Stream的收集操作
Stream流的收集方法
- R collect(Collect collector)
- 但这个收集方法的参数是一个Collector接口
- R collect(Collect collector)
工具类Collector 提供了具体的收集方法
public static <T> Collector toList() : 把元素收集到List集合中 public static <T> Collector toSet() : 把元素收集到Set集合中 public static Collector toMap(Function keyMapper, Function valueMapper) : 把元素收集到Map集合中