当前位置: 首页 > 面试题库 >

Java 8单声道

华升
2023-03-14
问题内容

为了帮助理解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所要做的就是提供符合 三个* 定律的 两个 功能。 *

两个功能:

  1. 值放在单子语境中

    • Haskell的Maybe:return/Just
    • Scala的选择: Some
    • 功能性Java的选择: Option.some
    • JDK8的可选: Optional.of
    • 在单子上下文中 应用 函数

    • Haskell的Maybe :(>>=又名bind

    • Scala的选择: flatMap
    • 功能性Java的选择: flatMap
    • JDK8的可选: 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文件中声明该类。例如: