如何在Java中模拟函数式编程,特别是如何将函数映射到项目集合?
map(func,new String [] {“ a”,“ b”,“ c”}));
什么是最冗长和尴尬的方法?
在Java之前,所有的函数式编程尝试在Java中都会有些 冗长 和/或 笨拙 ,直到Java 8。
最 直接的 方法是提供一个Function
接口(例如Guava的这种形式),并提供采用和调用该接口的各种方法(例如Collections#transfrom()
我认为您的map()
方法应该执行的操作)。
不好的事情是,您需要Function
使用匿名内部类来实现并经常这样做,该内部类具有非常冗长的语法:
Collection<OutputType> result = Collections.transform(input, new Function<InputType,OutputType>() {
public OutputType apply(InputType input) {
return frobnicate(input);
}
});
Lambda表达式(在Java
8中引入)使此操作变得相当容易(甚至可能更快)。使用lambdas的等效代码如下所示:
Collection<OutputType> result = Collections.transform(input, SomeClass::frobnicate);
或更冗长,但更灵活:
Collection<OutputType> result = Collections.transform(input, in -> frobnicate(in));
本文向大家介绍详解JAVA 函数式编程,包括了详解JAVA 函数式编程的使用技巧和注意事项,需要的朋友参考一下 1.函数式接口 1.1概念: java中有且只有一个抽象方法的接口。 1.2格式: 1.3@FunctionalInterface注解: 与 @Override 注解的作用类似,Java 8中专门为函数式接口引入了一个新的注解: @FunctionalInterface 。该注 解可用于
本文向大家介绍Java函数式编程(六):Optional,包括了Java函数式编程(六):Optional的使用技巧和注意事项,需要的朋友参考一下 选取单个元素 直觉来说选取单个元素肯定会比选取多个要简单得多,不过这里也存在一些问题。我们先看下一般的做法的问题是什么,然后再看下如何用lambda表达式来解决它。 我们先新建一个方法来查找一个以特定字母开头的元素,然后打印出来。 这个方法简直跟刚过去
本文向大家介绍Java函数式编程(七):MapReduce,包括了Java函数式编程(七):MapReduce的使用技巧和注意事项,需要的朋友参考一下 译注:map(映射)和reduce(归约,化简)是数学上两个很基础的概念,它们很早就出现在各类的函数编程语言里了,直到2003年Google将其发扬光大,运用到分布式系统中进行并行计算后,这个组合的名字才开始在计算机界大放异彩(那些函数式粉可能并不
本文向大家介绍Java函数式编程(九):Comparator,包括了Java函数式编程(九):Comparator的使用技巧和注意事项,需要的朋友参考一下 实现Comparator接口 Comparator接口的身影在JDK库中随处可见,从查找到排序,再到反转操作,等等。Java 8里它变成了一个函数式接口,这样的好处就是我们可以使用流式语法来实现比较器了。 我们用几种不同的方式来实现一下Comp
函数式编程 -> 函数响应式编程 现在大家已经了解我们是如何运用函数式编程来操作序列的。其实我们可以把这种操作序列的方式再升华一下。例如,你可以把一个按钮的点击事件看作是一个序列: // 假设用户在进入页面到离开页面期间,总共点击按钮 3 次 // 按钮点击序列 let taps: Array<Void> = [(), (), ()] // 每次点击后弹出提示框 taps.forEach {
本文向大家介绍Java函数式编程(五):闭包,包括了Java函数式编程(五):闭包的使用技巧和注意事项,需要的朋友参考一下 使用词法作用域和闭包 很多开发人员都存在这种误解,认为使用lambda表达式会导致代码冗余,降低代码质量。恰恰相反,就算代码变得再复杂,我们也不会为了代码的简洁性而在代码质量上做任何妥协,下面我们就会看到。 在前面一个例子中我们已经可以重用lambda表达式了;然而,如果再匹