Stream的API-创建Stream
Collection.stream() 最常用
1
2
3
4
5
6
7
8
9List<User> users = Arrays.asList(new User("张三",20),new User("张三疯",15),new User("李四",100));
// 创建一个流
// users.stream()
users.stream().filter(user->user.name.startsWith("张"))
.sorted(Comparator.comparing(User::getAge))
.map(User::getName)
.collect(Collectors.toList());Stream.of(T … values) 接收若干个参数 把它变成一个流
- String.chars() 把这个字符串包含的所有字符变成一个流
- IntStream.range()
1
IntStream.range(0,2) // 包头不包尾
API
boolean allMatch(Predicate<? super T> predicate);
是否所有元素符合这个判定boolean anyMatch(Predicate<? super T> predicate);
是否任何一个元素符合这个判定noneMatch
任何元素都不满足这个判定- count() 统计个数
Stream<T> distinct();
去重empty()
清空流filter
过滤findAny
看看有没有任何一个元素在这个流里面generate
返回一个无限的 类似生成器 “低频使用”limit
限制这个流的长度map
把一个流映射为另外一个流max
min
of
创建一个流peek
看看流最开始的元素是什么reduce
把这个流变成新的元素skip
跟 limit 很像sorted
把流变成有序的流toArray
findFirst/findAny
String.chars
统计大写字母次数
1 | package com.github.hcsp.polymorphism; |
IntStream
返回 1 ~10 之间的偶数
1 | import java.util.stream.IntStream; |
anyMatch
是否含有姓 李 的用户
1 | import java.util.*; |
findAny
1 | users.stream() |
联合 Optional 的正确使用方式
1 | public static void findZhangUser(){ |
级联操作 Optional + 函数式的最佳用法
- orElseThrow 参数是一个 Supplier 从无到有
- isPresent 参数是 Consumer 接受一个东西把它吃掉
- 不要把 Optional 当作空指针的替代品,当作参数传来传去
- 应该把它当作返回值 对这个返回值进行函数式操作
1 | public static void findZhangUser(){ |