Stream流中的常用方法foeEach和Stream流中的常用方法filter
延迟方法:返回值类型仍然是Stream接口自身类型的方法,因此支持链式调用。(除了中介方法外,其余方法均为延迟方法)
终结方法:返回值类型不再是Stream接口自身类型的方法,因此不再支持类似StringBuilder那样的链式调用。本小节中,终结方法包括count和forEach方法。
逐一处理:forEach
虽然方法名字叫forEach,但是与for循环中的for-each昵称不同
java void forEach(Consumer<? super T> action
该方法接受一个Consumer接口函数,会将每一个流元素交给该函数进行处理。
复习Consumer接口:
java.util.function.Consumer<T>接口是一个消费性接口。
Consumer接口中包含抽象方法void accept(T t),意为消费一个指定泛型的数据
package com.yang.Test.StreamStudy;
import java.util.stream.Stream;
public class forEachStudy03 {
public static void main(String[] args) {
//获取一个Stream流
Stream<String> stream = Stream.of("张三", "李四", "王五", "赵六", "田七");
//使用Stream流中方法forEach对Stream流中的数据进行遍历
// stream.forEach((String name)->{
// System.out.println(name);
// });
stream.forEach(s -> System.out.println(s));
}
}
Stream流中的常用方法filter
package com.yang.Test.StreamStudy;
import java.util.stream.Stream;
/**
* Stream流中的常用方法filter:用于对Stream流中的数据进行过滤
* Stream<T> filter(Predicate<? super T> pred)
* filter方法的参数Predicate是一个函数式接口,所以可以传递Lambda表达式,对数据进行过滤
* Predicate中的抽象方法
* boolean test(T t);
*/
public class FilterStudy04 {
public static void main(String[] args) {
//创建一个Stream流
Stream<String> stream = Stream.of("张三丰", "张翠山", "赵敏", "周芷若", "张无忌");
//对Stream流中的元素进行过滤,只要姓张的人
Stream<String> stream2 = stream.filter((String name) -> {
return name.startsWith("张");
});
//遍历stream2
stream2.forEach(s -> System.out.println(s));
//优化写法
// stream.filter(s -> s.startsWith("张")).forEach(s -> System.out.println(s));
}
}