Stream操作流
介绍
什么是操作流
- 操作流类似于一个高级的迭代器,但是只能遍历一次。在流的过程中,我们可以对流进行一些操作,比如过滤和获取一些符合要求的元素等。
- 操作流一般与新增的Lambda表达式一同使用,用于简化一些基本操作
操作流的类型(在单个语句中)
- 中间操作,接收一个流对象,返回一个流对象(便于进行链式操作)
- 终端操作,只能有一个且在语句末尾
//示例建议看完下文再来
List<String> list = new ArrayList<>();
list.add("apple");
list.add("banana");
list.add("orange");
list.add("apple");
long count = list.stream().distinct().count();
System.out.println(count);
distinct()方法是一个中间操作(去重),它会返回一个新的流(流中没有共同元素)
Stream<T> distinct();
count()方法是一个终端操作,返回流中的元素的个数
long count();
- 注意:终端操作不会立即被执行,只有等到终端操作时,流才真正地开始遍历。换句话说就是,一次遍历执行多个操作。
创建流
//情况一:数组创建流
String[] arr = new String[]{"apple","banana","orange"};
Stream<String> stream = Arrays.stream(arr);
//情况二:集合创建流
List<String> list = new ArrayList<>();
list.add("apple");
list.add("banana");
list.add("orange");
stream = list.stream();
//情况三:直接创建
Stream<String> stream = Stream.of("apple","banana","orange");
流操作
public class StreamDemo {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("周杰伦");
list.add("王力宏");
list.add("陶喆");
list.add("林俊杰");
//过滤操作(含有“王”的字符串)
Stream<String> stream = list.stream().filter(element -> element.contains("王"));
//
stream.forEach(System.out::println);
}
}
过滤(filter)
filter()方法接收一个Predicate类型(新增的一个函数式接口,在之后Lambda表达式章节会细讲)
待续......
哈哈哈