文章13 | 阅读 6314 | 点赞0
stream是数据的渠道,用于操作数据源(集合、数组等)所生成的元素序列。
区别在于 集合操作的是数据,而流是进行计算
1、通过Collection接口创建
2、通过Arrays静态方法stream()创建数组流
3、通过值创建流
4、通过函数创建流
筛选和切片
方法 | 描述 |
---|---|
filter(Predicate p) | 接收Lambda,从流中排除某些元素 |
distinct() | 筛选,通过流生成元素的hashCode()和equals()方法去除重复元素 |
limit(long maxSize) | 截断流,使元素不超过给定的数量 |
skip(long n) | <br>跳过元素返回一个扔掉了前n个元素的流。若流中元素不足n个,<br><br>则返回一个空流。与limit(n)互补<br> |
映射
方法 | 描述 |
---|---|
map(Function f) | <br>接收一个函数作为参数,该函数会被应用到每个元素上,<br><br>并将其映射成一个新元素<br> |
mapToDouble(ToDoubleFunction f) | <br>接收一个函数作为参数,该函数会被应用到每个元素上<br><br>产生一个新的DoubleStream<br> |
mapToInt(ToIntFunction f) | <br>接收一个函数作为参数,该函数会被应用到每个元素上<br><br>产生一个新的IntStream<br> |
mapToLong(ToLongFunction f) | <br>接收一个函数作为参数,该函数会被应用到每个元素上<br><br>产生一个新的LongStream<br> |
floatMap(Function f) | <br>接收一个函数作为参数<br><br>将流中的每一个值都换成另一个流<br><br>然后把所有流连接成一个流<br> |
排序
方法 | 描述 |
---|---|
sorted() | 产生一个新流,按照自然顺序排序 |
sorted(Comparator comp) | 产生一个新流,按照比较器排序 |
查找和匹配
方法 | 描述 |
---|---|
allMatch(Predicate p) | 检查是否匹配所有元素 |
anyMatch(Predicate p) | 检查是否至少匹配一个元素 |
noneMatch(Predicate p) | 检查是否没有匹配所有元素 |
findFirst() | 返回第一个元素 |
findAny() | 返回流中任意的元素 |
count() | 返回流中元素总数 |
max(Comparator c) | 返回流中最大值 |
min(Comparator c) | 返回流中最下值 |
forEach(Consumer c) | <br>内部迭代使用Collection接口需要用户去迭代,称为内部迭代<br><br>相反,StreamApi使用内部迭代--StreamAPI帮你把迭代做了<br> |
归约
方法 | 描述 |
---|---|
reduce(T iden,BinaryOperator b) | 可以将流中元素 |
reduce(BinaryOperator b) | <br>可以将流中的元素反结合起来得到一个值。<br><br>返回 Optional<T><br> |
收集
方法 | 描述 |
---|---|
collect(Collector c) | 将流转换为其它形式。接收一个Collector接口的实现,用于给Stream中元素做汇总的方法 |
Collector 接口中方法的实现决定了如何对流执行收集操作(如收集到 List、Set、Map)。但是 Collectors 实用类提供了很多静态方法,可以方便地创建常见收集器实例,具体方法与实例如下表:
方法 | 返回类型 | 作用 | 示例 |
---|---|---|---|
toList | List<T> | 把流中元素收集到List | List<Employee> emps= list.stream().collect(Collectors.toList()); |
toSet | Set<T> | 把流中元素收集到Set | Set<Employee> emps= list.stream().collect(Collectors.toSet()); |
toCollection | Collection<T> | 把流中元素收集到创建的集合 | <br>Collection<Employee>emps=list.stream()<br><br>.collect(Collectiors.toCollection(ArrayList::new));<br> |
counting | Long | 计算流中元素的个数 | <br>long count = list.stream()<br><br>.collect(Collectors.counting());<br> |
summingInt | Integer | 对流中元素的整数属性求和 | <br>inttotal=list.stream()<br><br>.collect(Collectors.summingInt(Employee::getSalary);<br> |
averagingInt | Double | 计算流中元素Integer属性的平均值 | <br>doubleavg= list.stream()<br><br>.collect(Collectors.averagingInt(Employee::getSalary));<br> |
summarizingInt | IntSummaryStatistics | 收集流中Integer属性的统计值。如:平均值 | <br>IntSummaryStatisticsiss= list.stream()<br><br>.collect(Collectors.summarizingInt(Employee::getSalary));<br> |
joinin | String | 连接流中每个字符串 | <br>String str= list.stream().map(Employee::getName)<br><br>.collect(Collectors.joining());<br> |
maxBy | Optional<T> | 根据比较器选择最大值 | <br>Optional<Emp>max= list.stream()<br><br>.collect(Collectors.maxBy(comparingInt(Employee::getSalary)));<br> |
minBy | Optional<T> | 根据比较器选择最小值 | <br>Optional<Emp> min = list.stream()<br><br>.collect(Collectors.minBy(comparingInt(Employee::getSalary)));<br> |
reducing | 归约产生的类型 | 从一个作为累加器的初始值<br> 开始,利用BinaryOperator与流中元素逐个结合,从而归约成单个值 | <br>inttotal=list.stream()<br><br>.collect(Collectors.reducing(0,Employee::getSalar,Integer::sum)<br> |
collectingAndThen | 转换函数返回的类型 | 包裹另一个收集器,对其结<br> 果转换函数 | <br>inthow= list.stream()<br><br>.collect(Collectors.collectingAndThen(Collectors.toList(),List::size));<br> |
groupingBy | Map<K, List<T>> | 根据某属性值对流分组,属<br> 性为K,结果为V | Map<Emp.Status, List<Emp>> map= list.stream()<br> .collect(Collectors.groupingBy(Employee::getStatus)) |
partitioningBy | Map<Boolean,List<T>> | 根据true或false进行分区 | <br>Map<Boolean,List<Emp>>vd= list.stream()<br><br>.collect(Collectors.partitioningBy(Employee::getManage));<br> |
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://yumbo.blog.csdn.net/article/details/102970284
内容来源于网络,如有侵权,请联系作者删除!