java培训
搜索分类

java函数式编程的好处是什么?java函数式编程示例

赋能网 2023-05-09 68

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知识,敬请关注赋能网。


发表评论
0评