Stream
接口的静态方法of可以获取数组对应的流。
static <T> Stream<T> of (T... values )
参数是一个可变参数。那么我们就可以传递一个数组
两种方法
- 延迟方法:返回值类型仍然是
Stream
接口自身类型的方法,因此支持链式调用。 (除了终结方法外,其余方
法均为延迟方法。) - 终结方法:返回值类型不再是
Stream
接口自身类型的方法,因此不再支持类似stringBuilder
那样的链式调
用。本小节中,终结方法包括count
和forEach
方法。
1.逐一处理:forEach
Stream<String> stream = Stream.of("张无忌", "张三丰", "周芷若");
// 示例:使用forEach遍历
// stream.forEach((String name)->{
// System.out.println(name);
// });
stream.forEach(name -> System.out.println(name)); // 张无忌 张三丰 周芷若
2.过滤处理:filter
// 示例:使用filter进行过滤
Stream<String> stream = Stream.of("王刚", "王二", "孙二", "王子");
Stream<String> stream2 = stream.filter((String name) -> {
return !name.endsWith("二");
});
stream2.forEach(name -> System.out.println(name));// 王刚 王子
3.统计个数:count
// count方法返回long类型且是终结方法
ArrayList<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
Stream<Integer> str = list.stream();
System.out.println(str.count()); //5
4.取用前几个:limit
// 取用前几个就写几,是延迟方法
Stream<String> str1 = Stream.of("A", "B", "C", "D");
Stream<String> str2 = str1.limit(2);
str2.forEach(a -> System.out.println(a)); //A B
5.跳过前几个:skip
// 跳过前几个就写几,是延迟方法
Stream<String> str1 = Stream.of("A", "B", "C", "D");
Stream<String> str2 = str1.skip(2);
str2.forEach(a -> System.out.println(a)); //C D
6.合并:concat
Stream<String> str1 = Stream.of("A", "B");
Stream<String> str2 = Stream.of("C", "D");
Stream<String> str3 = Stream.concat(str1, str2);
str3.forEach(a -> System.out.println(a)); //A B C D
7.综合案例
ArrayList<String> part1 = new ArrayList<>();
part1.add("AAA");
part1.add("B");
part1.add("CCC");
part1.add("DD");
part1.add("EEEEE");
part1.add("FFF");
part1.add("GGG");
ArrayList<String> part2 = new ArrayList<>();
part2.add("HHH");
part2.add("I");
part2.add("JJJ");
part2.add("KK");
part2.add("LLLLL");
part2.add("MMM");
part2.add("NNN");
Stream<String> one = part1.stream().filter(name -> name.length() == 3).limit(3); // 留下ACF
Stream<String> two = part2.stream().filter(name -> name.length() == 3).skip(2); // 留下MN
Stream<String> all = Stream.concat(one, two);
all.forEach(name -> System.out.println(name));