Tag: 函数式编程

Java Stream:按布尔谓词划分为两个列表

我有一份employees名单。 它们具有isActive布尔字段。 我想将employees分为两个列表: activeEmployees和formerEmployees 。 是否可以使用Stream API? 什么是最复杂的方式?

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

我想在我将要教授的课程中使用Functional Java或Guava(或者不太可能使用Scala)。 尽管在JVM上运行了许多函数式语言,但我希望坚持使用尽可能类似于Java的东西,即在Java 8中具有预期的function特性,在概念和语法上最兼容的东西。 。 看起来functionJava和番石榴是最好的候选者。 我无法在function,易用性,概念接近直接Java等方面找到任何比较它们的东西。有没有人知道这些库之间的良好比较?

使用scala模式匹配而不是java switch case有什么好处?

每个人都说模式匹配是函数式语言的一个很好的特性。 为什么? 我不能简单地使用ifs和切换案例的一切吗? 我想了解使用模式匹配而不是常规过程编程ifs和switch case的优点

Java中的function数据结构

Java标准库是否具有function更新的任何function数据结构,如不可变集,列表等?

function范式中的动态编程

我正在寻找关于项目欧拉的问题三十一 ,请问,有多少不同的方法可以使用任意数量的1p,2p,5p,10p,20p,50p,£1(100p)和£的硬币赚2英镑2(200p)。 有递归解决方案,例如Scala中的这个解决方案(Pavel Fatin) def f(ms: List[Int], n: Int): Int = ms match { case h :: t => if (h > n) 0 else if (n == h) 1 else f(ms, n – h) + f(t, n) case _ => 0 } val r = f(List(1, 2, 5, 10, 20, 50, 100, 200), 200) […]

使用Hibernate映射FunctionalJava选项

我有一个hibernate映射的Java对象JKL ,它充满了一堆普通的hibernate-mappable字段(比如字符串和整数)。 我添加了一个新的嵌入字段(它位于同一个表中 – 不是映射), asdf ,这是一个fj.data.Option 。 我已经明确表示这个字段实际上可能不包含任何内容(而不是每次访问时都必须处理null )。 如何在JKL.hbm.xml文件中设置映射? 我希望hibernate在检索对象时自动将数据库中的null转换为fj.data.Option 。 它还应该将fj.data.Option的非null实例转换为some fj.data.Option 。 我还有其他的诡计吗? 谢谢。

删除代码重复

我正在尝试为Java创建一个小函数式编程库(只是为了抓住我自己的痒)。 在定义List s, Set s和Map s 的高阶函数时 ,我遇到了这个问题:采用集合并返回相同类型集合的函数具有几乎相同的实现,但必须重新定义每个数据结构 – List s, Set s和Map s。 例如,这里是List s和Set s的map函数的实现: public static List map( List xs, Func1 transformer ) { List ys = new ArrayList(); for(A a : xs) { ys.add(transformer.apply(a)); } return ys; } public static Set map( Set xs, Func1 transformer ) { Set ys = […]

如何在Java中实现列表折叠

我有一个List,并希望将它减少到单个值(函数编程术语“折叠”,Ruby术语inject ),就像 Arrays.asList(“a”, “b”, “c”) … fold … “a,b,c” 由于我感染了函数式编程思想(Scala),我正在寻找一种更简单/更短的编码方式 sb = new StringBuilder for … { append … } sb.toString

是否有一种方便的方法来创建一个测试字段是否等于给定值的谓词?

我经常发现自己需要过滤Stream或使用谓词来检查给定字段是否具有给定值。 比方说,我有这个POJO: public class A { private Integer field; public A(final Integer field) { this.field = field; } public Integer getField() { return field; } } 我想根据field的值过滤对象Stream : final Integer someValue = 42; Stream.of(new A(42), new A(1729), new A(42), new A(87539319), new A(null)) .filter(a -> Objects.equals(a.getField(), someValue)) … 是否有一种方便的方法来生成filter方法的谓词? 我注意到有Predicate.isEqual但它不符合需要。 我可以很容易地写一个这样的: public static Predicate isEqual(Function […]

为什么Java 8中存在像DoubleFunction这样的原始函数

我刚看了一下新的Java 8 函数包,并想知道为什么有这样的接口 DoubleFunction IntFunction LongFunction … 哪些不扩展Function 。 这是否意味着我无法传递Function ,其中需要IntFunction ,反之亦然? 这同样适用于*Block , *Supplier和*UnaryOperator 。 我可以看到返回基元时我不必检查null的优点,但缺点列表似乎要长得多