终结方法:
void forEach(Consumer action); 会将每个元素传进处理
long count() 返回元素总个数
boolean allMatch(Predicate predicate); 全满足?
boolean anyMatch(Predicate predicate); 一个满足?
boolean noneMatch(Predicate predicate);都不满足?
T reduce(默认值, (x,y)->{ 比如x+y }); 将一组数据加工出结果
x第一次为默认值,y为stream的元素1,依次进行
map搭配reduce:
// 求出所有年龄的总和
int totalAge = Stream.of(
new Person("刘德华", 58),
new Person("张学友", 56)
.map((p) -> p.getAge()) 抽出年龄流
.reduce(0, (x, y) -> x + y); 累加
System.out.println("totalAge = " + totalAge);
Optional findFirst(); 找到第一个元素,返回Optional(新类型.get()查看元素)
Optional max/min (Comparator comparator); 通过定制排序返回最大或最小值
非终结方法(链式stream):
filter(Predicate predicate); 根据判断条件 返回过滤后的子集流
limit(long maxSize); 返回指定长度截取后的流,大于则返回原流
skip(long n);返回指定步数后的流,大于则跳过头返回空流
<R>Stream<R> map(Function<T,R> mapper)将T类型所有元素 映射成 R类型
也可以抽取一部分数据进行转换出U流(T -> U)。比如抽取出Student中的name
Stream<String> original = Stream.of("11", "22");
Stream<Integer> result = original.map(Integer::parseInt); 依次转为11,12
result.forEach(s -> System.out.println(s + 10)); 输出21 32(stream累加
collect()
sorted(); 自然排序
sorted(Comparator comparator); 定制排序
distinct(); 去重
static Stream concat(Stream a, Stream b) 流合并 (静态方法