问题标签 [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 回答
1655 浏览

lambda - 使用 Java 8 Stream API 展平地图并关联值

假设我有一组字符串到整数值的映射:
Map<HashSet<String>, Integer> map = new HashMap<>().

例如,mapis(我们假设没有重复的字符串):

如何使用Java 8 Stream API获得如下another_map类型:Map<String, Integer>

它看起来像一个flatMap操作,但是我怎样才能将整数值与每个字符串键适当地关联起来呢?

0 投票
0 回答
1074 浏览

scala - flatMap(_) 和 flatMap(x => x) 的区别

在为不耐烦的 Scala 解决收集练习问题时:

编写一个接收字符串集合和从字符串到整数的映射的函数。返回一个整数集合,这些整数是映射的值,对应于集合中的一个字符串。例如,给定< Array("Tom", "Fred", "Harry") >< Map("Tom" -> 3, "Dick" -> 4, "Harry" -> 5) >返回< Array(3,5) >。提示:用于<flatMap>组合.<Option><get>

这是我的解决方案并且工作正常:

但是,将代码更改为

我收到返回类型错误。它要求我将返回类型更改为 ((Option[Int]) => GenTraversableOnce[_B]) => List[Nothing]

flatMap(x => x) 和 flatMap(_) 有什么区别。据我了解,两者都是一样的。

PS这个问题的更简单的解决方案是

0 投票
1 回答
270 浏览

scala - 如何多次调用`flatMap`?- FP-ish 方式

问题

在玩玩具示例时 -位置,骑士可以在移动后到达棋盘n,从某个位置开始x- 我想知道是否存在更清洁的解决方案(在简洁和函数式编程的意义上)

  • 执行flatMap(暂时忽略filter)一定次数(每次移动一次)
  • 拥有(甚至)更多的 FP-ish 编码方式

我试过的

  • 一个简单的递归变体move(...)
  • 使用函数组合的变体move2(...)

代码

编辑 - 2015-11-29 - 02:25AM

从 Alvaro Carrasco 给出的答案中得到一些启发,我move2优雅地将方法重写为:

问题:

  • 为什么要Kleisli按照 Alvaro 的建议使用 Scalaz?(不是责备,我想要争论;))
  • 是否有可能更优雅的解决方案?
0 投票
3 回答
1070 浏览

scala - flatMap 到底是做什么的?

对于学校的编码任务,我必须使用 flatmap 做一些事情,但我完全不知道它的作用,我已经在网上阅读了几页并在我的教科书中阅读,但我仍然没有真正理解它的作用。我知道 map 的作用,但由于某种原因,我很难将我的头绕在 flatmap 上。任何人都可以帮忙吗?谢谢。

只是为了添加更多信息-当我查看在线示例时,我确实看到了 flatmap 如何返回与 map 不同的东西。但是当 flatmap 被调用时,它实际上在做什么呢?平面图实际上是如何工作的?在返回结果之前它在做什么?

0 投票
1 回答
57 浏览

java - 如何将其返回到数组或双精度列表中

我无法设法将其检索到数组或集合中,我该怎么做?

这不起作用

0 投票
1 回答
2641 浏览

scala - Scala - 平面映射一系列选项和可遍历

考虑在某些案例匹配上编写的 flatMap。例如:

但是,这不会编译。如果 seq 是 Option[Int] 的全部或 Seq[Int] 的全部,则 flatMap 有效。但如果 Seq 是选项和 Seq 的混合体,则不会。为什么会有这样的限制?这是否解决了我目前无法想到的特殊歧义。

EDIT1 从 REPL 添加代码片段

EDIT2 在菲利波的回答之后,我在 REPL 中尝试了以下代码,它起作用了。

每种情况下的分辨率有何不同。Seq更重要的是,当我映射而不是 flatMap 时,结果与我创建的 a 相同。

0 投票
5 回答
1916 浏览

scala - 为什么我们需要 flatMap(通常)?

我一直在研究 FP 语言(断断续续),并且使用过 Scala、Haskell、F# 和其他一些语言。我喜欢我所看到的并理解 FP 的一些基本概念(绝对没有范畴论的背景——所以请不要谈论数学)。

因此,给定一个类型M[A]map它接受一个函数A=>B并返回一个M[B]. 但是我们也有flatMapwhich 接受一个函数A=>M[B]并返回一个M[B]. 我们也有flattenwhich 接受 aM[M[A]]并返回 a M[A]

此外,我读过的许多资料都描述flatMap为.mapflatten

那么,鉴于这flatMap似乎等同于flatten compose map,它的目的是什么?请不要说它是为了支持“理解”,因为这个问题确实不是 Scala 特有的。我不太关心语法糖,而是关心它背后的概念。Haskell 的绑定运算符 ( ) 也会出现同样的问题>>=。我相信它们都与某些类别理论概念有关,但我不会说那种语言。

我看过 Brian Beckman 的精彩视频Don't Fear the Monad不止一次,我想我知道那flatMap是一元组合运算符,但我从未真正看到它使用他描述此运算符的方式。它执行此功能吗?如果是这样,我如何将该概念映射到flatMap

顺便说一句,我对这个问题写了很长的文章,其中有很多清单显示了我试图深入了解其含义的实验flatMap,然后遇到了这个问题,它回答了我的一些问题。有时我讨厌 Scala 的隐式。他们真的可以搅浑水。:)

0 投票
1 回答
1143 浏览

scala - scala:选项元组上的复杂平面图

我的数据类型是:(List[(Option[Set[Long]], Option[Set[(Long, Long)]])]即一个 2 元组选项的列表,一个用于一组 Long,一个用于一组 2 元组的 Long)。例如:

我希望将这个 List 平面映射成一个List[Set[Long]]类型,以这样一种方式,第二个 Option 的每个第一个元素都将连接到一个带有第一个 Option 的新 Set。所以这里想要的结果是:

这适用于以下代码:

当第二个选项为 时,情节变厚None,第一个选项“存在”,例如:

并假设我无法避免这种情况。在这种情况下,我想按原样获取第一个 Set:

但是,使用与上面相同的代码,该set2值变成了一个空集,map在这种情况下没有任何意义,我会得到一个空列表:

那么,我该怎么做呢?最好优雅:)

0 投票
1 回答
162 浏览

swift - 展平和展开二维数组中的选项

下面的代码完成了这项工作。

但是flatMap如果find,一个接一个的不会使代码易于阅读。您将如何以更简洁的方式编写此内容?

0 投票
2 回答
477 浏览

scala - 为什么映射器函数结果不是 Vector[Option[Int]] 的 Vector[Option[Int]] 上的 flatMap 有效?

例如,

产生 aVector(1, 2, 3)而不是给出错误。正如我在其他语言中看到的那样,flatMap当你有一个产生嵌套的映射器函数时使用它,所以我希望这是一个有效的flatMap

如果我使用 a由于容器包装,我的映射器函数会产生一个Vector会导致嵌套(即)。但是,将删除此嵌套并将其展平。当嵌套两个相同的单子时,这是有道理的。Vector(Vector(1), Vector(2), Vector(3), Vector(4))mapflatMap

但是,我不明白如何将 aflatMap与返回 an 的映射器函数一起使用Option使 aVector[Option[Int]]变为Vector[Int]. 是否正在进行某种转变(我以前从未见过这种情况),有人可以解释一下并可能指出一些资源吗?

非常感谢