为了帮助理解monad是什么,有人可以使用Java提供示例吗?有可能吗?
如果您从此处http://jdk8.java.net/lambda/下载预发行版本的兼容Lambda的JDK8,则可以使用Java使用Lambda表达式。
下面显示了使用此JDK的lambda示例,有人可以提供相对简单的monad吗?
public interface TransformService {
int[] transform(List<Integer> inputs);
}
public static void main(String ars[]) {
TransformService transformService = (inputs) -> {
int[] ints = new int[inputs.size()];
int i = 0;
for (Integer element : inputs) {
ints[i] = element;
}
return ints;
};
List<Integer> inputs = new ArrayList<Integer>(5) {{
add(10);
add(10);
}};
int[] results = transformService.transform(inputs);
}
仅供参考:
提出的JDK8可选类
确实满足 了Monad的三个定律。这是一个证明这一点的要点。
一个Monad所要做的就是提供符合 三个* 定律的 两个 功能。 *
两个功能:
将 值放在单子语境中
return
/Just
Some
Option.some
Optional.of
在单子上下文中 应用 函数
Haskell的Maybe :(>>=
又名bind
)
flatMap
flatMap
flatMap
请参见上述要点,以获取有关这三个定律的Java演示。
注意:要理解的关键事项之一是 要在monadic上下文中应用 的 函数 签名:它采用原始值类型,并返回monadic类型。
换句话说,如果您具有的实例Optional<Integer>
,则可以传递给其flatMap
方法的函数将具有签名(Integer) -> Optional<U>
,其中U
是,而不必是的值类型Integer
,例如String
:
Optional<Integer> maybeInteger = Optional.of(1);
// Function that takes Integer and returns Optional<Integer>
Optional<Integer> maybePlusOne = maybeInteger.flatMap(n -> Optional.of(n + 1));
// Function that takes Integer and returns Optional<String>
Optional<String> maybeString = maybePlusOne.flatMap(n -> Optional.of(n.toString));
您不需要任何Monad接口即可以这种方式进行编码或以这种方式进行思考。在Scala中,您不会编码到Monad接口(除非您正在使用Scalaz库…)。看来,JDK8还将使Java人员也能够使用这种
链式单子计算 风格。
希望这会有所帮助!
更新: 在此处博客有关此内容。
给定以下monos: 双: 和: 具有相同的输出: 和之间有什么区别,在这种情况下? 从https://projectreactor.io/docs/core/release/reference/index.html#which-operator: [如果你]有一个序列,但[你]对值不感兴趣,并且[你]想在最后切换到另一个单声道,[使用]。 [如果您]希望通过将发布者从1个Mono和任何源端协调到
问题内容: 我在这里遇到以下问题:我得到了一个代表音频数据的字节块(uint16_t *),并且生成它们的设备正在捕获单声道声音,因此很明显,我在1通道上具有单声道音频数据。我需要将此数据传递到另一台设备,该设备需要交错的立体声数据(因此为2个通道)。我要做的基本上是复制数据中的1通道,以便立体声数据的两个通道都包含相同的字节。您能指出一个有效的算法吗? 谢谢,f。 问题答案: 如果只需要交错的立
我最近一直在学习使用Java中的reactor库和Spring框架进行反应式编程,并且在很大程度上我已经能够掌握它。然而,我发现自己有好几次遇到同样的情况,我想知道我哪里出了问题。 我正在努力解决的问题的要点是,我经常想用mono做一些事情,比如找到一些补充数据,然后将其添加回原始mono中。zip函数在我看来是一个理想的候选函数,但最终我订阅了两次原始mono,这不是我的意图。 这里有一个人为的
我不知道或问这个问题,除了这里,如果不是我道歉的地方。 这里有一个REST请求,它附带了一个简单的bean,其中包含一个列表等属性。对此列表进行迭代,以使用返回Mono(findOne)的响应mongo调用。但我不认为我找到了正确的方法: 在我看来,“反应性”的想法并不是必须做一个块,但我没有找到如何做,否则。 有人能帮我找到做这项任务的最佳方法吗?
我的代码如下。我需要从mongo db获得每次旅行的车费,然后将每次旅行的所有车费相加,得到总车费。我被一种我不知道如何阅读的单声道音乐所困扰。我试着把它转换成通量,但我得到了通量 "'
本文向大家介绍Android 舱单声明-,包括了Android 舱单声明-的使用技巧和注意事项,需要的朋友参考一下 示例 AppWidgetProvider在应用程序的AndroidManifest.xml文件中声明该类。例如: