java - 当您在别人的代码中看到“flatMap”方法时,您最先想到的第一个用例是什么?
问题描述
对于某种理论问题,我很抱歉,但我想找到一种快速阅读别人的功能代码的方法,使用模板构建方法链。
例如:
情况1。
当我看到 Spring Integration 使用.peek方法或.wireTap时,我主要期望记录、触发监视或只是过渡运行的外部操作,例如:
.peek(params ->
log.info("creating cache configuration {} for key class \"{}\" and value class \"{}\"",
params.getName(), params.getKeyClass(), params.getValueClass()))
或者
.peek(p ->
Try.run(() -> cacheService.cacheProfile(p))
.onFailure(ex ->
log.warn("Unable to cache profile: {}", ex.toString())))
或者
.wireTap(sf -> sf.handle(msg -> {
monitoring.profileRequestsReceived();
log.trace("Client info request(s) received: {}", msg);
案例 2。
当我看到 Spring Integration 中使用.map方法或.transform时,我明白我已经准备好得到 的结果someFunction(input)
,例如:
.map(e -> GenerateTokenRs.builder().token(e.getKey()).phoneNum(e.getValue()).build())
或者
.transform(Message.class, msg -> {
ErrorResponse response = (ErrorResponse) msg.getPayload();
MessageBuilder builder = some tranforming;
return builder.build();
})
当前案例。
但我对.flatMap方法没有这么普遍的看法。请你给我你的意见好吗?
添加1:
致 Turamath:我知道 .map 和 .flatMap 方法之间的区别。我在代码中积极使用 .map 和 .flatMap。
但我向社区询问他们的经验和编码模板。
解决方案
研究流式方法的签名/javadoc以理解它们总是有帮助的:
flatMap() 操作具有对流的元素应用一对多转换的效果,然后将生成的元素展平为新的流。
因此,我期望或自己编写的典型代码:
return someMap.values().stream().flatMap(Collection::stream)
该映射的值是集合,我想将所有这些集合的条目拉到一个流中,以便在此处进一步处理。
换句话说:它是关于“拉出东西”,并将它们放入流/集合中以进行进一步处理。
推荐阅读
- json - 无法读取未定义的属性“rotationOffset”
- yaml - 如何将 YAML 锚合并为列表项并覆盖值
- google-apps-script - GAS:通过自定义 UI 菜单的脚本授权失败,并显示“您无权执行该操作”。
- ruby-on-rails - 我的 js 文件中有两个 ajax 获取请求。我无法阻止第二个请求中的默认行为
- react-native - realm react-native:如何正确查询字符串数组
- reporting-services - 如何为空的 SSRS 组显示一些静态文本?
- java - 如何安装 jtransc?
- javascript - 是否可以自动选择带有 chrome 扩展名的文件输入的文件?
- jquery - div元素上的悬停事件
- php - 稍后初始化(子)类并将其附加到实例化的父级