java+8+stream+赋值_Java8Stream使⽤
Stream 接⼝
所在包:import java.util.stream.Stream;
java streamA sequence of elements supporting sequential and parallel aggregate operations.
Stream 是元素的集合,类似Iterator
⽀持顺序和并⾏的聚合操作
Iterator VS Stream
Iterator,⽤户只能⼀个⼀个的遍历元素并对其执⾏某些操作
Stream,⽤户只要给出需要对其包含的元素执⾏什么操作,⽐如“过滤掉长度⼤于10的字符串”、“获取每个字符串的⾸字母”等,具体这些操作如何应⽤到每个元素上,都由 Stream 完成
使⽤Stream的基本步骤
创建 Stream
通过 Stream 接⼝的静态⼯⼚⽅法 (注意:Java8⾥接⼝可以带静态⽅法)
通过 Collection 接⼝的默认⽅法 stream(),把⼀个 Collection 对象转换成Stream (较常⽤)
转换 Stream,每次转换原有Stream对象不改变,返回⼀个新的Stream对象
对 Stream 进⾏聚合(Reduce)操作
Stream 的转换
distinct 对 Stream 中包含的元素进⾏去重操作
List list = Arrays.asList(1, null, 1, 2, null, 5, 3, 9, 7);
list.stream().distinct().forEach((s) -> {System.out.print(s + " ");});
filter(Predicate super T> predicate) 对 Stream 中包含的元素使⽤给定的过滤函数进⾏过滤操作
List list = Arrays.asList(1, null, 1, 2, null, 5, 3, 9, 7);
list.stream().filter((s) -> s != null).forEach((s) -> {System.out.print(s + " ");});
map(Function super T, ? extends R> mapper) 对 Stream 中包含的元素使⽤给定的转换函数进⾏转换操作
List list = Arrays.asList(1, null, 1, 2, null, 5, 3, 9, 7);
list.stream().filter((s) -> s != null).map((s) -> s + 1).forEach((s) -> {
System.out.print(s + " ");
});
limit(long maxSize) 对⼀个 Stream 进⾏截断操作,获取其前 N 个元素
skip(long n) 返回⼀个丢弃原 Stream 的前 N 个元素后剩下元素组成的新 Stream
List list = Arrays.asList(1, null, 1, 2, null, 5, 3, 9, 7);
list.stream().filter((s) -> s != null).limit(2).forEach((s) -> {
System.out.print(s + " ");
});
对 Stream 进⾏聚合(Reduce)操作
sum() max() count()
List list = Arrays.asList(1, null, 1, 2, null, 5, 3, 9, 7);
IntStream is = list.stream().filter((s) -> s != null).mapToInt(Integer::intValue);
System.out.println(is.max());
collect
List list = Arrays.asList(1, null, 1, 2, null, 5, 3, 9, 7);
List result = list.stream().filter((s) -> s != null).List());
result.forEach((s) -> {
System.out.print(s + " ");
});
reduce(BinaryOperator accumulator)
sum() max() count() 等都可以使⽤ reduce() 实现
reduce ⽅法接受⼀个函数,这个函数有两个参数:
第⼀个参数 s1 是上次函数执⾏的返回值(也称为中间结果)
第⼆个参数 s2 是 stream 中的元素,这个函数把这两个值相加,得到的和会被赋值给下次执⾏这个函数的第⼀个参数第⼀次执⾏的时候第⼀个参数的值是 Stream 的第⼀个元素,第⼆个参数是 Stream 的第⼆个元素。
这个⽅法返回值类型是Optional。
List list = Arrays.asList(1, null, 1, 2, null, 5, 3, 9, 7);
Optional op = list.stream().filter((s) -> s != null).reduce((s1, s2) -> s1 + s2);
System.out.()); // 相当于求和
搜索相关
allMatch 是不是Stream中的所有元素都满⾜给定的匹配条件
anyMatch Stream中是否存在任何⼀个元素满⾜匹配条件
findFirst 返回Stream中的第⼀个元素,如果Stream为空,返回空Optional
noneMatch 是不是Stream中的所有元素都不满⾜给定的匹配条件
List list = Arrays.asList(1, null, 1, 2, null, 5, 3, 9, 7);
System.out.println(list.stream().filter((s) -> s != null).allMatch((s) -> s > 0));
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论