问题标签 [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 投票
2 回答
1910 浏览

java - 用于java中的错误处理

我的新工作场所大量使用函数式 java 来处理错误(http://www.functionaljava.org/javadoc/4.5/functionaljava/fj/data/Either.html)。

几乎根本不使用异常。

由于许多原因,这很烦人。举个例子:方法内的每个 api 调用(返回一个 Either),必须首先检查返回的 Either 是否是错误,然后再继续下一行。如果它是一个错误,它会以一个 Either 的形式传播回方法调用的堆栈中。堆栈中的每个方法还需要检查返回的 Either 是否有错误,直到最后我们会找到负责处理错误的方法。这会导致结构非常糟糕的 java 代码。我不能真正编写一个正常的流程 java 代码,因为我必须在每个 api 调用上“停止”(所以流是不可能的)。例如

当然,我可以使用 Either 的一元方法(我会这样做),但这并不能解决必须“询问”返回类型是否为错误或值的核心问题。我认为使用 Either 作为错误处理的基础设施不是一个好主意的原因还有很多(长赋值语句、长方法、嵌套泛型等)。

为了解决这个问题,我想可能会为每个返回“错误”的api调用抛出一个特定的异常,并在我目前正在处理的顶级方法上捕获一次异常。

但这似乎是不可能的,因为在 Either 投影类型上做类似事情的唯一方法是抛出一个 java 错误,这并不意味着在(几乎)任何情况下都会被捕获(我可能会意外捕获 stackoverflow 或内存不足错误)。

有什么建议或想法吗?

谢谢

0 投票
2 回答
67 浏览

functional-programming - 转换为函数式 Java 风格

如何使用过滤器、收集器等以适当的 Java 8 功能样式重写以下内容:

0 投票
4 回答
1149 浏览

java - 如何编写函数和消费者在 Java 8 中?

为什么我们不能像组合函数一样组合函数和消费者?

这似乎是对现有 Function 接口的明显即兴创作。在 Java 8 中避免这种能力有什么原因吗?

另外,如下使用 Function 的扩展实现是一种常见的做法吗?

0 投票
3 回答
377 浏览

java - 在不执行“else”逻辑的情况下从 Optional 功能重写分配

我的代码中有以下内容:

IntelliJ 弹出一个提示说can be replaced with single expression in functional style。我尝试将此块替换为:

这会导致测试失败,fooDAO.addFoo(name)无论 是否Optional为空,都会调用它,并且如果已经存在,addFoo则不应运行其中的逻辑。Foo

fooDAO.addFoo(name)除非有必要,否则是否可以在不调用的情况下重写原始块?

0 投票
1 回答
522 浏览

java - Java 静态方法、通配符/通用返回类型

我正在构建一个 API,它使用抽象类来调用静态方法。一些Java伪代码:

并且,在哪里myMethod调用:

myMethod按预期编译。而且,invokingMethod由于类型不兼容,也无法按预期编译:

如果我: (1) @SuppressWarnings("unchecked") oninvokingMethod和 (2) 将 的结果myMethod转换为 , 调用时的列表MyClassType,即List<MyClassType> list = (List<MyClassType>) myMethod(MyClassType.class, converter, objects);. 但是,对于任何使用 API 的人来说,这并不透明,这感觉不太理想。

我有哪些选项可以myMethod返回调用它的类型列表 to invokingMethod,同时维护我的抽象类和静态方法,同时理想地提高内部的可用性invokingMethod

欢迎任何建议或替代想法。

提前致谢。

0 投票
1 回答
45 浏览

java - Lambda 表达式在没有有效最终变量的情况下工作

我读过 lambda 表达式使用的外部变量必须是最终的或有效的最终的。例如,如果我尝试修改供应商主体中的外部字符串值,编译器会阻止我,就像上面的定义一样。但是如果我使用外部 Pojo(修改它的属性 - 所以它的内部状态),那么它可以正常工作并否定上面的声明。

怎么会?

0 投票
1 回答
67 浏览

java - 为什么这个消费者抱怨编译时错误?

我是 java8 的新手,我正在尝试编写模板方法设计模式,我为此目的使用 Consumer,但我不知道我在哪里做错了。

任何帮助都是不言而喻的。

0 投票
3 回答
115 浏览

java - 我们如何使用 Java 函数实现 add(4)(10)(20)(3)(1).total?

我正在学习使用,

我写了一个代码,它使用 java Function 将 4 添加到自身,

代码如下,

当我运行上面的代码时,我得到的输出是

我怎样才能实现我在 javaScript 中所做的事情,如下所示,

上面代码的输出是

我可以有相同类型的 java 函数调用,我可以传递尽可能多的数字参数,并且 addFunction 将添加这些数字。

0 投票
2 回答
58 浏览

functional-programming - 函数式编程依赖关系:如何在未直接连接在一起的函数之间共享依赖关系

这些不同的功能像这样组合在一起

我需要在 f3 周围添加两个新函数 fx 和 fy,如下所示:

所以我需要预处理 f3 的参数,然后对 f3 的输出进行后处理

这里函数 fx 进行更改, fy 将更改恢复,但 fy 需要 fx 的其他详细信息才能恢复,例如要知道要恢复到哪些值

问题是函数 fx 需要产生两个输出

问题:如何在未直接连接在一起的函数之间共享依赖关系,是否有解决此问题的空间方式/技术?

仅供参考,我正在使用 Java8

0 投票
2 回答
162 浏览

java - 如何将 Java 8 流从许多条目“缩小”到更少

如何将包含大量项目的 Java 8 流“缩小”为包含较少项目的流?

我不是在问映射,每个输入项都有 1 个“输出”项,或者在流减少到单个值的情况下减少,而是将许多项的流缩小到一个更少的项。“收缩”是有状态的;发射一个项目是基于一个或多个先前的项目(尽管它只是向前移动,所以状态非常简单)。

我有一个简单的时间戳事件流;START 或 STOP 事件。我需要将这个简单事件流减少到记录中,每个记录都包含一个开始和停止时间。在最简单的情况下,有一个 START 和 STOP 对,但在没有干预 STOP 的情况下重复 START 是完全合法的。重复 STOP 也是合法的,虽然是退化的。

下面是一个(简化的)版本来演示。input查看和之间的区别expected;输入项多于输出项。

关键是 shrinkEvents 签名是针对 Streams,而不是 Lists。我想要一个不需要中间件的List<String> output版本shrinkEvents