Stream流及常用方法
Stream流
java.util.stream.Stream 是Java 8新加入的最常用的流接口。(这并不是一个函数式接口。)
特点:
1.Stream流是一个集合元素的函数模型,其本身并不存储任何元素或地址值
2.Stream流是JDK1.8之后出现的,具有更优雅的书写方式。
3.中间操作都会返回流对象本身,这样多个操作可以串联成一个管道。可以对操作进行优化,比如延迟执行和短路.
4.以前都是使用Iterator进行外部迭代,Stream流提供了内部迭代的方式,流可以直接调用遍历对象。
获取一个流有以下几种常用的方式:
1.所有的 Collection 集合都可以通过 stream 默认方法获取流;
2.Stream 接口的静态方法 of 可以获取数组对应的流。
eg:
public static void main(String[] args) {
List<String> strings = List.of("张三丰","周芷若","赵敏","张无忌","张强");
strings.stream()//Collection类中的方法,返回一个Stream对象
//Stream<T> filter(Predicate<? super T> predicate)
//主要用于写过滤器
.filter( name ->name.startsWith("张"))
.filter( name ->name.length() ==3)
//void forEach(Consumer<? super T> action);
//主要用于对其中的每一个元素遍历
.forEach( name -> System.out.println(name));
}
常用方法
流模型的常用方法可以被分成两种:
延迟方法 :返回值类型仍然是 Stream 接口自身类型的方法,因此支持链式调用。(除了终结方法外,其余方法均为延迟方法。)
终结方法 :返回值类型不再是 Stream 接口自身类型的方法,因此不再支持类似 StringBuilder 那样的链式调用。本文终结方法主要介绍 count 和 forEach 方法。
1.void forEach(Consumer<? super T> action);
该方法接收一个 Consumer 接口函数,会将每一个流元素交给该函数进行处理。用于遍历元素。(顺带一提,Lambda表达式是真方便)。
public static void main(String[]</