首页 > 解决方案 > 当您在别人的代码中看到“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。

但我向社区询问他们的经验和编码模板。

标签: javafunctional-programming

解决方案


研究流式方法的签名/javadoc以理解它们总是有帮助的:

flatMap() 操作具有对流的元素应用一对多转换的效果,然后将生成的元素展平为新的流。

因此,我期望或自己编写的典型代码:

return someMap.values().stream().flatMap(Collection::stream)

该映射的是集合,我想将所有这些集合的条目拉到一个流中,以便在此处进一步处理。

换句话说:它是关于“拉出东西”,并将它们放入流/集合中以进行进一步处理。


推荐阅读