Stream操作流
介绍
什么是操作流
- 操作流类似于一个高级的迭代器,但是只能遍历一次。在流的过程中,我们可以对流进行一些操作,比如过滤和获取一些符合要求的元素等。
- 操作流一般与新增的Lambda表达式一同使用,用于简化一些基本操作
操作流的类型(在单个语句中)
- 中间操作,接收一个流对象,返回一个流对象(便于进行链式操作)
- 终端操作,只能有一个且在语句末尾
1 2 3 4 5 6 7 8 9
| 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()方法是一个中间操作(去重),它会返回一个新的流(流中没有共同元素)
count()方法是一个终端操作,返回流中的元素的个数
- 注意:终端操作不会立即被执行,只有等到终端操作时,流才真正地开始遍历。换句话说就是,一次遍历执行多个操作。
创建流
1 2 3 4 5 6 7 8 9 10 11 12
| 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");
|
流操作
1 2 3 4 5 6 7 8 9 10 11 12 13
| 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表达式章节会细讲)
待续……