问题标签 [functional-java]

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 回答
256 浏览

java-8 - Functionaljava:对任意类型的列表进行排序

我有一个非常简单的 Java bean WatchedFile,它有一个fileName字段。

我想对一个对象进行排序fj.data.ListWatchedFile但我正在努力fj.Ord为列表的sort()方法定义一个。这就是我想出的:

这太丑了!我确信有更好的方法来实例化一个Ord对象......可能利用一些 Java 8 魔法?

0 投票
1 回答
97 浏览

functional-java - 从现有 Ord 创建 Ord

如果我有一个F<A, B>,如何将现有的转换Ord<A>为一个Ord<B>

例如:

0 投票
1 回答
94 浏览

scala - 你如何将这个功能性的 java 代码转换为 SparkContext 之上的 scala?

好的,所以我pointsList<GeoPoint>

以下代码是使用 java 8 功能 API 编写的。它获取点,为每个点计算其匹配的集群 ,然后将它们按点分组ClusterKey。最终我们得到一个Map<ClusterKey, List<GeoPoint>Here it is:

0 投票
1 回答
258 浏览

java - 来自枚举的无限流

在函数式 java 中,我希望以下内容创建一个无限流:

但它会在一次完整枚举后停止。javadoc 证实了这一点,指出它只能流式传输,直到枚举用尽。

那么,如何制作无限流呢?

0 投票
1 回答
95 浏览

java - 函数式 Java:从 Maven 导入

我已经在一台新机器上克隆了一个 maven 项目,但是我在一些依赖项方面遇到了一些问题,因为它们似乎没有被加载。一种这样的情况是fj.Effect函数式java。我不确定我是否(手动)添加了正确的库。

在代码中,我有:

我尝试添加org.org.functionaljava:functionaljava-java8:4.32并且org.functionaljava:functionaljava:4.3IntelliJ 识别Effect但将第一行突出显示为错误并说:我在另一行中有类似的问题:

类型 fj.Effect 没有类型参数。

我是否导入了错误的包?

更一般地说,有没有办法根据现有代码知道我应该使用哪些包?

0 投票
0 回答
188 浏览

java - Java 8 lambdas 与作为对象的匿名类有何不同(在底层)?

编辑:这个问题与Java8 Lambdas vs Anonymous classes 有何不同:上一个问题中提供的答案是关于它们如何在更高级别上工作的。我已经了解语法的好处。我的问题是关于事实,匿名类最终是对象实例,而 lambdas不是对象。我不想理解这种机制背后的差异和影响以及它是如何工作的。

因此,第一个显着的区别自然是语法。第二个是,据我所知,lambdas 只能实现为@FunctionalInterfaces,这要求我们正在实现的接口只有一种方法,这样可以更好地推断。

前提:据我所知,功能接口有一个“非对象方法”(来源在这里

我的问题是,它们到底有什么不同?这是我不完全理解的,lambdas 不是真正的对象实例吗?与匿名类相比,lambda 不是对象的真正区别是什么?

0 投票
2 回答
96 浏览

java - fj.data.Set 对比

java.util,我们可以用containsAll方法来比较两者java.util.Set。比较两者的最佳方法是什么fj.data.Set

fj使用over真的有什么“有价值的”好处java.util吗?

0 投票
1 回答
1097 浏览

java - 使用 Fugue/FunctionalJava 摆脱 Null 和 Throws?

好的,所以我是一名长期的 OO 开发人员,试图进入这个“新发现”的函数式编程世界 - 至少,与此相关,我正在尝试编写类似Java 领域的代码null并且throw不存在通过玩弄OptionEither单子。(至少,我认为它们是单子;我仍然对这个术语感到不舒服,无论我是否正确使用它......)我要离开Atlassian Fugue图书馆了;我尝试查看函数式 Java库,它比我目前准备的要大得多。如果 fj 做了我需要的,而 Fugue 没有,我完全赞成。

基本上,我想要完成的是相当于这个相当丑陋的 Java 代码:

天真地,使用Eithermonad,我期待能够做这样的事情:

...其中每个逻辑方法都将返回一个包含适当异常(可能是特定于域的错误类,但现在异常工作得很好)作为左侧和Option<something>右侧的 Either。这些doSomethingWith...方法将执行他们想要对错误执行的任何日志记录/处理。逻辑方法的一个例子是:

其他方法的定义类似;最好不要Option参数使用 - 如果前一个方法返回,则该方法根本不会被调用Option.none

除了泛型类型的编译器错误使我无法实际测试它之外,从逻辑上讲,它看起来并不像我想要的那样 - 我希望在第一次之后基本上没有操作Either.left 值被返回,但更多地看它,我猜它会继续尝试将 Either.left 结果传递给下一次调用,并继续进行下去。

was只需使用选项就可以实现我的目标:

不幸的是,要完成与原始块相同的逻辑,逻辑方法的实现方式与此类似:

由于.map将结果提升为Option,因此返回null此处可以正常工作。不幸的是,我本质上仍然对调用者隐藏了错误状态(更糟糕的是,IMO 用null它来表示错误——这并没有说明 doProcessing 是否null出于潜在的正当理由返回)。

所以,本质上,我想按照前面的 getMessage 示例的方式进行方法签名 -

我喜欢能够查看返回值并一眼就知道“此方法要么失败,要么返回可能存在但可能不存在的东西”的想法。但是,我对 FP 太陌生,不知道该怎么做。

我的理解(尽管可能有缺陷)是我可以做类似的事情

(尽管可能使用不同的方法)这将

  1. 在处理 Either.left 后随时停止处理(即调用适当的doSomethingWithXException方法并停止)
  2. 只要 Either.right 存在(如果相关函数返回 Option,则不是 Option.none()),继续整个链。
  3. 只有doSomethingWithAwesomeStuffException在调用失败时才调用awesomeStuff- 如果任何其他方法失败,它将无法到达。

我正在尝试做的事情是否合理?我的意思是,我确信这可能是某种方式,但是尝试将其硬塞进Java语法是否太复杂了,即使使用这些库中的任何一个(或其他我不知道的库)?

0 投票
1 回答
276 浏览

java - Java 中不同的 Optional/Option 语义

我试图了解 Java 生态系统中可能是 3 个最常用的实现中不同的 Option/Optional 语义背后的原因:Java 8、Functional Java 和 Guava。

考虑以下三个片段。

  1. java.util.Optional.of(100).map(i -> null)结果Optional.empty
  2. fj.data.Option.some(100).map(i -> null)结果Some(null)
  3. com.google.common.base.Optional.of(100).transform(i -> null)结果NullPointerException

3个选择背后的原因是什么?如果适用,从函数式编程的角度来看,什么可以被认为是最“纯粹”或“正确”的?例如,就查看Option类型为 monad 而言,什么是最正确的;或者什么可以被认为是最可组合的?知道如何在允许空值的函数式语言中处理这一点也很有趣。

0 投票
3 回答
2188 浏览

java - 过滤 Java 8 列表

我使用 fj.data.List 提供的 List 类型在功能 Java 中有一个 List 类型列表

我正在尝试使用以下内容对其进行过滤:

我收到这条消息

在此处输入图像描述

根据文档, List 有一个过滤方法,这应该可以工作 http://www.functionaljava.org/examples-java8.html

我错过了什么?

谢谢