问题标签 [flatmap]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
279 浏览

swift - How does a flatMap on a double-generic data-structure looks like?

I have the following (simple) data structure:

#xA;

This type represents work which can take an Input and turns in into a desired Output. I am trying to see whether this data structure conforms to some functional concepts like a functor or a monad.

Functor

#xA;

That seems to be correct as far as I am aware. I am able to write a map function which can turn Work<Input, Output> into Work<Input, MoreOutput>

Monad

I have trouble thinking of the definition for a flatMap (or fold) function for Work. The only thing I can come up with is the following:

#xA;

If you look up the flatMap definition for an Array in swift it looks like this (simplified):

#xA;

This is a function where its argument is a function which transforms an Element into T and results an Array. I cannot think of a way to abstract this to the Work type.

From another functional book I found a general definition for flatMap as follows (on an object F holding type A):

#xA;

which is a different definition of flatMap than Array seems to implement.

Can someone explain this difference to me? And is it even possible to define a 'correct' flatMap function on Work? Or does Work not satisfy the properties to be a Monad?

** Edit

Thanks phg for so much useful info. I've tried to do the Profunctor definition:

Making Work a Profunctor:

#xA;

Does that look right to you?

0 投票
2 回答
427 浏览

scala - Map 中的 flatMap 如何在 scala 中工作?

这是我的代码

上面的代码给出

如果我将 for 理解的屈服值更改为a(a, b)结果是

如果我更改(a, b)(a, b, c),结果是

我的问题是确定结果类型的机制是什么?

0 投票
1 回答
440 浏览

rxjs - 为什么 flatMap 和 fromEvent 仅在按照示例在第一次订阅期间返回时才起作用?

如下图,为什么示例1在我们返回div然后单独返回一个新的click observable flatMap to 时会失败click$

示例 2 工作正常。JSBin 下面试试看

任何人都可以解释为什么会发生这种情况?据我了解,flatMap 扩展了 Observable。 http://jsbin.com/sowodi/3/edit?js,控制台,输出

0 投票
2 回答
1242 浏览

scala - 可以更简洁地使用 Scala 的 Option flatMap 方法吗?

诚然,我对 Scala 很陌生,而且我在使用许多 Scala 示例中看到的语法糖时遇到了麻烦。它通常会产生一个非常简洁的陈述,但老实说到目前为止(对我来说)有点难以理解。

因此,我希望将 Option 类的典型用法(安全解引用)作为理解的一个很好的起点,例如,在我见过的特定示例中使用下划线。

我发现了一篇非常好的文章,展示了使用 Option 来避免 null 情况的示例。

https://medium.com/@sinisalouc/demystifying-the-monad-in-scala-cc716bb6f534#.fhrljf7nl

他这样描述一个用途:

顺便说一句,您也可以将这些函数编写为就地 lambda 函数,而不是先验地定义它们。然后代码变成了这样:

看起来很棒!也许不像 groovy 那样简洁,但还不错。

所以我想我会尝试将它应用于我试图解决的案例。

我有一个类型Person,其中 a 的存在Person是可选的,但如果我们有一个人,他的属性是有保证的。因此,OptionPerson类型本身中没有使用类型。

Person有一个类型为 的PID Id。该Id类型由两种String类型组成;Id-Type 和 Id-Value。

我使用 Scala 控制台测试了以下内容:

好的。这设置了我的人,它是可选的实例。

我从上面链接的文章中了解到,我可以使用 flatMap 获取 Persons Id-Val;像这样:

伟大的!这样可行。如果我实际上没有人,我的结果是“NoValue”。

我使用了 flatMap(而不是 Map),因为除非我误解(并且我对 Map 的测试不正确),否则如果我使用 Map,我必须提供备用或默认 Person 实例。我不想做的。

好的,所以,flatMap 是要走的路。

但是,这确实不是一个非常简洁的陈述。如果我用一种更时髦的风格来写它,我想我可以做这样的事情:

哇,这有点好看!

Scala 肯定有办法提供至少与 Groovy 一样好的东西吗?

在上面的链接示例中,他能够使用我之前提到的一些语法糖使他的陈述更加简洁。下划线:

甚至更简洁:

因此,在这种情况下,下划线字符似乎允许您跳过指定类型(因为类型是推断出来的)并将其替换为下划线。

但是,当我用我的例子尝试同样的事情时:

斯卡拉抱怨。

有人可以在这里帮助我吗?

我怎么会误解这个?有没有写我上面冗长的陈述的速记方法?flatMap 是实现我所追求的最佳方式吗?还是有更好的更简洁和/或可读的方式来做到这一点?

提前致谢!

0 投票
1 回答
2526 浏览

scala - Scala Flatmap on Array 里面的值部分

我有像 (a,b,Array(p1,p2,p3),c) 这样的 RDD,我想在值内的 Array 上应用 flatmap 以获得以下输出。(a,b,p1,c) (a,b,p2,c) (a,b,p3,c)

0 投票
4 回答
12143 浏览

arrays - Swift:将一组字典展平为一个字典

在 Swift 中,我试图将一系列字典扁平化为一个字典,即

我试过使用flatmap,但返回结果的类型是[(String, AnyObject)]而不是[String, Object]ie

所以我有两个问题:

  • 为什么返回类型 [(String, AnyObject)]?括号是什么意思?

  • 我如何达到预期的效果?

编辑:我更喜欢使用 Swift 的 map/flatmap/reduce 等功能方法,而不是 for 循环

0 投票
1 回答
2852 浏览

rx-java - RxJava - flatmap vs concatMap - 为什么在订阅时订购相同?

根据这个线程conCatMap 和 flatmap 仅在发出项目的顺序上有所不同。所以我做了一个测试并创建了一个简单的整数流,并想看看它们会以什么顺序发出。我做了一个小的 observable,它可以接收 1-5 范围内的数字并将它们乘以 2。简单的。

这是带有平面图的代码:

以及使用 concatMap 的完全相同的代码:

当我在日志中看到打印出来时,两者的顺序都是一样的,为什么?我以为只有 concatMap 会保留顺序?

0 投票
2 回答
74 浏览

java - 如何在java中单列表列表

我在这里有一个代码,可以在 java 中获取列表列表。但我现在的问题是我的服务器中的结果是可重复的......

例子

我的数组中的值的值数是出现的相同的 3 组数组。
这是我的代码。请帮我。

0 投票
0 回答
344 浏览

javascript - 'fmap' 和 'flatMap' 之间的区别(如果有)

到目前为止,我发现的每个资源都比较了mapflatMap
不是我的意图。

在这个关于 javascript 函数式编程的 YouTube 视频中(特别是 12:27 左右),演讲者展示了一个在函子上进行fmaping的示例。Maybe到目前为止一切都很好。让我感到困惑的是mjoin,而演讲者关于如何flatMap(不是fmap)的评论只是fmap和的组合mjoin

这让我感到困惑,因为到目前为止我一直在使用这些名称fmap并且flatMap可以互换,尽管这次谈话暗示它们不是同一个东西。

对于一个具体的问题,我想知道在函数式编程的上下文中这是否是特定于实现的,或者fmap实际上flatMap是两个不同的东西?如果它们不同,如​​果它不是平坦的,那么fin代表什么?fmap

它在我的脑海中仍然很模糊,但首先想到的是flatMap它将映射到一个函子,产生嵌套的函子,然后将其展平为一个函子(或至少一个级别)。相反,fmap的函数参数将返回单个函子,不需要展平。

也许我很近,或者很远。FP 世界中的任何人都关心阐明一些问题吗?

上面提到的视频。
https://www.youtube.com/watch?v=AvgwKjTPMmM

编辑

如果它们不同,是否f转换fmap仿函数映射
最佳的揣测。
尽管函子实现了映射,但从技术上讲,每个函子都map在作用于某种类型的函子。
请。清除。朦胧。脑。

0 投票
1 回答
1253 浏览

scala - 在 Spark 中 flatMap 与 map 的效率,然后是 reduce

我有一个包含多行文本的文本文件 sherlock.txt。我使用以下方法将其加载到 spark-shell 中:

我的目的是计算文件中的字数。我遇到了两种替代方法来完成这项工作。

首先使用flatMap:

第二次使用map,然后使用reduce:

两者都正确产生相同的结果。我想知道上述两种替代实现在时间和空间复杂度上的差异,如果确实有的话?

scala 解释器是否将两者都转换为最有效的形式?