常见方法
流模型的操作很丰富,这里介绍一些常用的API,这些方法可以被分成两种:
- 延迟方法:返回值类型仍然是Stream接口自身类型的方法 因此支持链式调用(除了终结方法外 其余方法均为延迟方法。)
- 终结方法:返回值类型不再是Stream接口自身类型的方法 因此不再支持类似StringBuilder那样的链式调用 本小节种 终结方法包括count和forEach方法
逐一处理:forEach
虽然方法名字叫forEach 但是与for循环中的for-each昵称不同
void forEach(Consumer<? super T> action);
该方法接收一个Consumer接口函数 会将一个流元素交给该函数进行处理
复习Consumer接口
java.util.function.Consumer<T>接口是一个消费型接口 Consumer接口中包含抽象方法void accept(T t),意为消费一个指定泛型的数据
代码:
/* Stream流中常用方法_forEach void forEach(Consumer<? super T> action); 该方法接收一个Consumer接口函数,会将每一个流元素交给函数进行处理。 Consumer接口是一个消费型的函数式接口,可以传递Lambda表达式,消费数据 简单记: forEach方法,用来遍历流中的数据 是一个终结方法,遍历之后就不能继续调用Stream流中的其他方法 */ public class BStream2 { public static void main(String[] args) { //获取一个Stream流 Stream<String> stream = Stream.of("张三","李四","王五","赵六","田七"); //正常写法 // stream.forEach((String name)->{ // System.out.println(name); // }); //使用Lambda表达式优化代码 stream.forEach(name-> System.out.println(name)); } }
过滤:filter
可以通过filter方法将一个流转换成另一个子集流。方法签名:
Stream<T> filter(Predicate<? super T> predicate);
该接口接收一个Predicate函数式接口参数(可以是一个Lambda或方法引用)作为筛选条件
代码:
/* Stream流中的常用方法——filter:用于对Stream流中的数据进行过滤 Stream<T> filter(Predicate<? super T> predicate); filter方法的参数Predicate是一个函数式接口,所以可以传递Lambda表达式,对数据进行过滤 Predicate中的抽象方法: boolean test(T t); */ public class BStream3 { public static void main(String[] args) { Stream<String> stream = Stream.of("张三", "张翠山", "赵敏", "周芷若", "张无忌"); //对Stream流中的元素进行过滤,只要性张的人 Stream<String> ms = stream.filter((String name)->{return name.startsWith("张");}); //遍历输出 ms.forEach(name-> System.out.println(name)); } }
运行结果:
Stream流的使用特点
Stream流属于管道流 只能被消费(使用)一次
第一个Stream流调用完毕方法 数据就会流转到下一个Stream上
而这时第一个Stream流已经使用完毕 就关闭了
所以第一个Stream流不能再调用方法了
标签:name,Stream,方法,常见,接口,forEach,Consumer From: https://www.cnblogs.com/qihaokuan/p/16612941.html