java引入了函数式编程,这表示Java从此不在是一个单纯的面向对象语言,现在它又同时混合了函数式编程。那java函数式编程的好处是什么?下面来我们就来给大家讲解一下。
从代码的可维护性上讲,函数式编程最大的好处是引用透明,即函数运行的结果只依赖于输入的参数,而不依赖于外部状态,因此,我们常常说函数式编程没有副作用。
没有副作用有个巨大的好处,就是函数内部无状态,即输入确定,输出就是确定的,容易测试和维护。
以下是java函数式编程示例:
1.不使用内置接口,消费型接口示例
我们自己定义了一个消费型的接口。
// 如果不使用内置函数接口,消费型接口例子 interface SpendMoney { void buy(double money); } class Test04 { public static void buySomething(double money, SpendMoney sm) { sm.buy(money); } public static void main(String[] args) { buySomething(1999, new SpendMoney() { @Override public void buy(double money) { System.out.println("我买了件大衣!!!花了" + money + "元钱"); } }); } }
2.使用内置函数式接口Consumer示例
已经存在了内置函数式接口,我们就没必要再定义自己的接口,显得多余。
class Test05 { public static void buySomething(double money, Consumersm) { sm.accept(money); } public static void main(String[] args) { buySomething(999, new Consumer() { @Override public void accept(Double o) { System.out.println("我买了件大衣!!!花了" + o + "元钱"); } }); // 用lambda表达优化 buySomething(999, o - > System.out.println("我买了件大衣!!!花了" + o + "元钱")); } }
3.使用断言型接口示例
Predicate 接口是一个函数式接口,它接受一个输入参数 T,返回一个布尔值结果。
该接口包含多种默认方法来将Predicate组合成其他复杂的逻辑(比如:与,或,非)。
该接口用于测试对象是 true 或 false。
我们可以通过以下实例(Java8Tester.java)来了解函数式接口 Predicate 的使用:
import java.util.Arrays; import java.util.List; import java.util.function.Predicate; public class Java8Tester { public static void main(String args[]) { Listlist = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9); // Predicatepredicate = n -> true // n 是一个参数传递到 Predicate 接口的 test 方法 // n 如果存在则 test 方法返回 true System.out.println("输出所有数据:"); // 传递参数 n eval(list, n - > true); // Predicatepredicate1 = n -> n%2 == 0 // n 是一个参数传递到 Predicate 接口的 test 方法 // 如果 n%2 为 0 test 方法返回 true System.out.println("输出所有偶数:"); eval(list, n - > n % 2 == 0); // Predicatepredicate2 = n -> n > 3 // n 是一个参数传递到 Predicate 接口的 test 方法 // 如果 n 大于 3 test 方法返回 true System.out.println("输出大于 3 的所有数字:"); eval(list, n - > n > 3); } public static void eval(Listlist, Predicatepredicate) { for (Integer n: list) { if (predicate.test(n)) { System.out.println(n + " "); } } } }
输出结果:
输出所有数据: 1 2 3 4 5 6 7 8 9 输出所有偶数: 2 4 6 8 输出大于 3 的所有数字: 4 5 6 7 8 9
函数式编程是种编程方式,有了它能够减少了可变量的声明,更好的利用并行,并且使代码更加简洁和可读哦!最后大家如果想要了解更多初识java知识,敬请关注赋能网。