[java]Stream API——collect、reduce、orElse(x)
一、collect
1、R collect(Supplier supplier, BiConsumer accumulator, BiConsumer combiner)
supplier:一个能创造目标类型实例的方法。
accumulator:一个将当元素添加到目标中的方法。
combiner:一个将中间状态的多个结果整合到一起的方法(并发的时候会用到)
List result = stream.collect(() -> new ArrayList<>(), (list, item) -> list.add(item), (one, two) -> one.addAll(two));
2、R collect(Collector collector)
Collector其实是上面supplier、accumulator、combiner的聚合体。那么上面代码就变成:
List list = Stream.of(1, 2, 3, 4).filter(p -> p > 2).collect(Collectors.toList());
3、Collector
Collector是Stream的可变减少操作接口,Collectors(类收集器)提供了许多常见的可变减少操作的实现。
4、创建Collector
a.转换成其他集合:toList、toSet、toCollection、toMap
List<Integer> collectList = Stream.of(1, 2, 3, 4)
.collect(Collectors.toList());
System.out.println("collectList: " + collectList);
// 打印结果
// collectList: [1, 2, 3, 4]
b.转成值:
使用collect可以将Stream转换成值。maxBy和minBy允许用户按照某个特定的顺序生成一个值。
- averagingDouble:求平均值,Stream的元素类型为double
- averagingInt:求平均值,Stream的元素类型为int
- averagingLong:求平均值,Stream的元素类型为long
- counting:Stream的元素个数
- maxBy:在指定条件下的,Stream的最大元素
- minBy:在指定条件下的,Stream的最小元素
- reducing: reduce操作
- summarizingDouble:统计Stream的数据(double)状态,其中包括count,min,max,sum和平均。
- summarizingInt:统计Stream的数据(int)状态,其中包括count,min,max,sum和平均。
- summarizingLong:统计Stream的数据(long)状态,其中包括count,min,max,sum和平均。
- summingDouble:求和,Stream的元素类型为double
- summingInt:求和,Stream的元素类型为int
- summingLong:求和,Stream的元素类型为long
例:
Optional<Integer> collectMaxBy = Stream.of(1, 2, 3, 4)
.collect(Collectors.maxBy(Comparator.comparingInt(o -> o)));
System.out.println("collectMaxBy:" + collectMaxBy.get());
// 打印结果
// collectMaxBy:4
c.分割数据块:Collectors.partitioningBy
Map<Boolean, List<Integer>> collectParti = Stream.of(1, 2, 3, 4)
.collect(Collectors.partitioningBy(it -> it % 2 == 0));
System.out.println("collectParti : " + collectParti);
// 打印结果
// collectParti : {false=[1, 3], true=[2, 4]}
d.数据分组:Collectors.groupingBy
Map<Boolean, List<Integer>> collectGroup= Stream.of(1, 2, 3, 4)
.collect(Collectors.groupingBy(it -> it > 3));
System.out.println("collectGroup : " + collectGroup);
// 打印结果
// collectGroup : {false=[1, 2, 3], true=[4]}
e.字符串:Collectors.joining
String strJoin = Stream.of("1", "2", "3", "4")
.collect(Collectors.joining(",", "[", "]"));
System.out.println("strJoin: " + strJoin);
// 打印结果
// strJoin: [1,2,3,4]
二、聚合操作reduce
T reduce(T identity, BinaryOperator accumulator)
代码:
int value = Stream.of(1, 2, 3, 4).reduce(100, (sum, item) -> sum + item);
或者使用方法引用:
int value = Stream.of(1, 2, 3, 4).reduce(100, Integer::sum);
value结果:101,103,106,110
T reduce(T identity, BinaryOperator accumulator)
- identity:它允许用户提供一个循环计算的初始值。(例中的100)
- accumulator:计算的累加器,其方法签名为apply(T t,U u),在该reduce方法中第一个参数t(例中的sum)为上次函数计算的返回值,第二个参数u(例中的item)为Stream中的元素,这个函数把这两个值计算apply,得到的和会被赋值给下次执行这个方法的第一个参数。
三、orElse(x):属于Stream终结操作,与findFirst()组合使用,返回对象,如果没有,则返回x。
StCompanySetting stCompanySetting = stCompanySettingDao.selectAll().stream().findFirst().orElse(null);//如果没有,则返回null
[java]Stream API——collect、reduce、orElse(x)的更多相关文章
- Spark算子--first、count、reduce、collect、lookup
转载请标明出处http://www.cnblogs.com/haozhengfei/p/4b8582c8dde1529abb11e4ccc8296171.html first.count.reduce ...
- 恕我直言你可能真的不会java第2篇:Java Stream API?
一.什么是Java Stream API? Java Stream函数式编程接口最初是在Java 8中引入的,并且与lambda一起成为Java开发的里程碑式的功能特性,它极大的方便了开放人员处理集合 ...
- java stream Api
Stream的简单使用 Stream的使用分为两种类型: Intermediate,一个Stream可以调用0到多个Intermediate类型操作,每次调用会对Stream做一定的处理,返回一个新的 ...
- Python特殊语法:filter、map、reduce、lambda [转]
Python特殊语法:filter.map.reduce.lambda [转] python内置了一些非常有趣但非常有用的函数,充分体现了Python的语言魅力! filter(function, s ...
- python之map、filter、reduce、lambda函数 转
python之map.filter.reduce.lambda函数 转 http://www.cnblogs.com/kaituorensheng/p/5300340.html 阅读目录 map ...
- 转:Python一些特殊用法(map、reduce、filter、lambda、列表推导式等)
Map函数: 原型:map(function, sequence),作用是将一个列表映射到另一个列表, 使用方法: def f(x): return x**2 l = range(1,10) map( ...
- Python里的map、reduce、filter、lambda、列表推导式
Map函数: 原型:map(function, sequence),作用是将一个列表映射到另一个列表, 使用方法: def f(x): return x**2 l = range(1,10) map( ...
- 内置函数_map()、reduce()、filter()
map().reduce().filter() map()内置函数把一个函数func依次映射到序列或迭代器对象的每个元素上,并返回一个可迭代的map对象作为结果,map对象中每个元素是原序列中元素经过 ...
- Python高阶函数map、reduce、filter、sorted的应用
#-*- coding:utf-8 -*- from selenium import webdriver from selenium.webdriver.support.wait import Web ...
随机推荐
- POJ-3131-Cubic Eight-Puzzle(双向BFS+哈希)
Description Let's play a puzzle using eight cubes placed on a 3 × 3 board leaving one empty square. ...
- Angular 回到顶部 滚动到特定的页面位置
$timeout(function() { // $location.hash('bottom'); // $anchorScroll(); // var a=angular.element(&quo ...
- intellij idea 重命名或复制一个项目(不用重启)
Idea 内无法直接修改Explorer 里文件夹的名称,只能手动改文件夹的名称. 目前找到的最好的方法: 1)重命名一个项目 在Idea 项目关闭状态下,在 Explorer (Windows) / ...
- 浅析Spring AOP
在正常的业务流程中,往往存在着一些业务逻辑,例如安全审计.日志管理,它们存在于每一个业务中,然而却和实际的业务逻辑没有太强的关联关系. 图1 这些逻辑我们称为横切逻辑.如果把横切的逻辑代码写在业务代码 ...
- PAT 1049 Counting Ones [难]
1049 Counting Ones (30 分) The task is simple: given any positive integer N, you are supposed to coun ...
- 用python 实现生成双色球小程序
生成双色球小程序: #输入n,随机产生n条双色球号码,插入n条数据库 #表结构: seq CREATE TABLE `seq` ( `id` int(11) NOT NULL AUTO_INCREME ...
- spring mvc 全局处理异常
spring框架支持很多种全局处理异常的方式 一.Spring MVC处理异常有4种方式: (1)使用Spring-MVC提供的SimpleMappingExceptionResolver: (2)实 ...
- 开发者应该了解的API技术清单
近几年,API经济纷纷崛起,无论是国外还是国内,众多厂商积极开放API.开发者很多时候是要借助这些API,才能轻松构建出一款应用,极大地提高开发效率和开发质量.文中整理了一份API服务清单,内容涵盖: ...
- CodeForces - 632E Thief in a Shop (FFT+记忆化搜索)
题意:有N种物品,每种物品有价值\(a_i\),每种物品可选任意多个,求拿k件物品,可能损失的价值分别为多少. 分析:相当于求\((a_1+a_2+...+a_n)^k\)中,有哪些项的系数不为0.做 ...
- JAVA垃圾回收机
垃圾回收基本算法 串型回收和并行回收 串行回收始终在一个CPU上执行回收操作.并行回收则将回收任务分为好几步,每步使用不同的CPU执行,这样加快了执行速度,有点像流水线作业. 并发执行和暂停应用程序 ...