标签: functional-java

Functional Java和Guava之间有很好的比较吗?

我想在我将要教授的课程中使用Functional Java或Guava(或者不太可能使用Scala).尽管在JVM上运行了很多函数式语言,但我仍然希望看到与Java尽可能相似的东西,即在Java 8中具有的功能特性,在概念和语法上最兼容的东西. .

它看起来像Functional JavaGuava是最好的候选者.我无法在功能,易用性,概念接近直接Java等方面找到任何比较它们的东西.有没有人知道这些库之间的良好比较?

java functional-programming functional-java guava

13
推荐指数
2
解决办法
3928
查看次数

使用函数java项目有什么经验?

我正在阅读以下问题 - 使用functional-java为Java生产项目添加闭包有多安全?我一直在考虑在我当前的项目中使用Functional Java项目.我想知道Stack Overflow的用户使用Functional Java项目的经历是什么?特别是,我对其中一些细节感到好奇:

  • 它是否提高了代码质量或清晰度?
  • 提高生产力?
  • 减少潜在的失败点?
  • 影响表现?

java functional-programming functional-java

11
推荐指数
1
解决办法
823
查看次数

如何通过函数式编程计算 Java 中的元音?

我需要计算 Functional Java 中单词列表中元音的数量。如果我有这个清单:

List<String> l = Arrays.asList("hello", "world", "test");
Run Code Online (Sandbox Code Playgroud)

我的想法是“删除”元音,然后以这种方式进行减法:

int tot = l.stream().map(s -> s.replace("a", "")).
            map(s -> s.replace("e", "")).
            map(s -> s.replace("i", "")).
            map(s -> s.replace("o", "")).
            map(s -> s.replace("u", "")).
            map(s -> s.length()).reduce(0, Integer::sum);
int res = l.stream().map(s->s.length()).reduce(0, Integer::sum)-tot;
Run Code Online (Sandbox Code Playgroud)

有一个更好的方法吗?

java functional-programming functional-java map-function

7
推荐指数
1
解决办法
639
查看次数

使用functional-java为Java生产项目添加闭包有多安全?

我很想在Java中使用闭包.我已经读过它们可能会或者可能不会成为Java 7.但是一个名为functional-java的开源项目已经实现了包括闭包在内的功能特性.

在企业生产应用程序中使用这样的库有多安全?

是否有更好的方法来向Java添加闭包?

java closures functional-programming functional-java

6
推荐指数
1
解决办法
627
查看次数

使用Hibernate映射FunctionalJava选项<Type>

我有一个hibernate映射的Java对象,JKL它充满了一堆普通的hibernate-mappable字段(比如字符串和整数).

我添加了一个新的嵌入字段(它位于同一个表中 - 而不是映射)asdf,这是一个fj.data.Option<ASDF>.我已经明确表示这个字段实际上可能不包含任何东西(而不是null每次访问它时都必须处理).

如何在我的JKL.hbm.xml文件中设置映射?我想Hibernate来自动转换null数据库到nonefj.data.Option<ASDF>,当它获取对象.还应的一个非空实例转换ASDFsomefj.data.Option<ASDF>.我还有其他的诡计吗?谢谢.

java functional-programming hibernate option functional-java

6
推荐指数
1
解决办法
3583
查看次数

在FunctionalJava.List中,"snoc"是什么意思?

FunctionJava的List类有一个附加的snoc方法: snoc

描述如下:

将给定元素追加(snoc)到此列表以生成新列表.

这里的"snoc"这个词是什么意思?我试图在维基百科中查找它并作为首字母缩略词但没有成功.这是否意味着它正在做一些特殊的追加?

编辑:感谢所有的指着我利弊

java functional-java

5
推荐指数
2
解决办法
2051
查看次数

Guava中的任何东西都类似于Functional Java的效果?

我知道纯函数式编程的目标之一是消除可变性,从而排除副作用.但是让我们面对现实吧,即使存在所有的函数式编程库,Java也不是一种函数式语言.事实上,似乎有些FP库知道并期待这一点.例如,在Functional Java中,有一个Effect类.在Jedi FP库中,有Command界面.这允许您 - 除其他外 - 将类型安全的命令模式应用于Iterable没有令人讨厌的for循环样板的元素.

Command<PhoneNumber> makeCall = new Command<PhoneNumber> {
    public void execute(PhoneNumber p) { p.call(); }
}
List<PhoneNumber> phoneList = ...
FunctionalPrimitives.forEach( phoneList, makeCall );
Run Code Online (Sandbox Code Playgroud)

所以问题是,番石榴中有类似的东西吗?

在接受澄清后接受回复

我正在开发一个框架,它可以帮助解决大多数Java FP库中固有的"垂直问题",在某些情况下.所以,我竟让如上图所示的代码示例:即明确宣布一个新的类实现的Command所有其垂直噪声过甜的烦躁,只需在声明之后立即应用它的目的.

我更多地考虑实际的命令模式,其中可能有几个可能的命令在其他地方声明,并且只有其中一个被传递到想要迭代应用它的代码中.此外,我的框架的目标是使创建功能接口对象(函数,谓词,命令,其他简单的lambda)更加惯用,而不是简单地将垂直问题移动到其他地方.我早就意识到这不在番石榴的范围内.但是由于其他FP库中有类似Command的接口,我只想知道Guava中是否存在模拟.

使用我的框架的更完整的代码示例可能是这样的:

class Stuff {
    private final Stuff CALLS_TO = callsTo(Stuff.class); // a proxy
    public static final Command<Stuff> CMD1 = commandFor(CALLS_TO.someMethod1());
    public static final Command<Stuff> CMD2 = commandFor(CALLS_TO.someMethod2());

    // methods exist for use elsewhere, but …
Run Code Online (Sandbox Code Playgroud)

java side-effects command-pattern functional-java guava

5
推荐指数
1
解决办法
3726
查看次数

在Java中进行错误处理

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

几乎根本没有使用异常。

出于多种原因,这是非常令人讨厌的imo。举例说明:方法内的每个api调用(返回Either)必须首先检查返回的Either是否是错误,然后再继续执行下一行。如果是错误,则以Either形式将其传播回方法调用堆栈中。堆栈中的每个方法都还需要检查重新调整的Either中的错误,直到最终我们到达负责处理错误的方法为止。这导致结构非常糟糕的Java代码。我真的不能编写正常的流Java代码,因为我必须在每个api调用上“停止”(因此流不成问题)。例如

Either<Error, Value> myMethod(String someVar) {
     Either<Error, Value> valEither someService.getSomething(someVar)
     if (valEither.isRight()) {
        Either<Error, Value> otherValue someService.getSomethingElse(valEither.right().value())
        if (otherValue.isRight()) ..... //you get the idea
     } else {
        //maybe log
        return valEither;
    }
}
Run Code Online (Sandbox Code Playgroud)

我当然可以使用Either的单调方法(我也这样做),但这不能解决必须“询问”返回类型(如果有错误或值)的核心问题。为什么我认为将Either用作错误处理基础结构并不是一个好主意,原因有很多(长分配语句,长方法,嵌套泛型等)。

要解决此问题,我想到了可能会为每个正在返回“错误”的api调用抛出特定异常,然后在当前正在使用的顶级方法上捕获一次异常。

Value val = myService.getSomething().rightOrThrow(new MyException("blaa"));
Run Code Online (Sandbox Code Playgroud)

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

myService.getSomething().right().valueE("some error msg");
Run Code Online (Sandbox Code Playgroud)

有什么建议或想法吗?

谢谢

java error-handling functional-java either

5
推荐指数
1
解决办法
980
查看次数

我在哪里可以找到包含functionaljava 3.0的存储库?

我想在maven项目中使用功能Java 3.0.我一直在谷歌搜索,但我找不到有效的信息,在我的pom.xml中包含相应的'依赖'.

有人提到他会将工件上传到scala-tools maven存储库,但似乎他没有跟进他的公告.

甚至看起来maven还没有早期版本的功能Java.

有没有人有关于这个问题的有效和最新信息?

谢谢!

PS:是的,我知道我可以下载并在我的项目中手动包含.jar,但这只是一个解决方案...

functional-java maven

4
推荐指数
1
解决办法
737
查看次数

在 Java 8 列表上过滤

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

import fj.data.List

List<Long> managedCustomers
Run Code Online (Sandbox Code Playgroud)

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

managedCustomers.filter(customerId -> customerId == 5424164219L)
Run Code Online (Sandbox Code Playgroud)

我收到这条消息

在此处输入图片说明

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

我错过了什么?

谢谢

java functional-programming functional-java java-8

4
推荐指数
1
解决办法
2046
查看次数

寻求对Function &lt;T,R&gt;的深入理解

下面显示的是一些使用Java Streams的示例代码。我的问题专门涉及Interface Function<T,R>接受type的输入T并返回type的东西R

import static java.util.Arrays.asList;
import static java.util.stream.Collectors.groupingBy;

import java.util.List;
import java.util.Map;

public class Dish {

  private final String name;
  private final boolean vegetarian;
  private final String calories;

  public Dish(String name, boolean vegetarian, String calories) {
    this.name = name;
    this.vegetarian = vegetarian;
    this.calories = calories;
  }

  public String getName() {
    return name;
  }

  public boolean isVegetarian() {
    return vegetarian;
  }

  public String getCalories() {
    return calories;
  }

  @Override
  public String toString() {
    return …
Run Code Online (Sandbox Code Playgroud)

java functional-java functional-interface

0
推荐指数
1
解决办法
53
查看次数