函数式编程

首先确认什么事函数式编程,也就是只需要关心需要什么,不要关注如何实现。函数式编程更多的是思想上

举个例子,找一个最小值:

        int[] nums = {1,2,3,4,5,6};
        int min = Integer.MAX_VALUE;

        System.out.println("before :" + min);

        // 命令式编程
        for(int i: nums){
            if(i < min){
                min = i;
            }
        }
        System.out.println("after :" + min);

        // 函数式编程
        int min2 = IntStream.of(nums).min().getAsInt();
        System.out.println("min2 :" + min2);

        // 如果需要开启多线程
        int min3 = IntStream.of(nums).parallel().min().getAsInt();
        System.out.println("min3 " + min3);
    }
before :2147483647
after :1
min2 :1
min3 1

lambda匿名函数,可以帮助简化代码,是jdk8加入的强大的功能,解决了长期java被人诟病代码重复的问题,定义一个方法接口,里面一般只有一个方法,因此我们在定义接口是,可以尽量接口单一,可以通过继承方式来实现多接口,lambda表达式帮助我们返回一个接口的实例,可以直接使用进行调用,同时jdk8加入新特性,也就是可以定义默认方法,一般接口的所有方法必须全部实现,使用默认方法可以无需实现,这样如果需要修改接口的话,直接添加默认方法,其实现类照样可以正常运行

@FunctionalInterface
interface DoubleNum{
    int doubleNum(int i);

    default int sum(int x, int y){
        x = this.doubleNum(x);
        return x + y;
    }
}

public class Lambda {
    public static void main(String[] args) {
        // lambda
        DoubleNum d1 = (i) -> i *2;

        // 常用写法
        DoubleNum d2 =  i -> i * 3;

        DoubleNum d3 = i -> {
            return i*2;
        };
        System.out.println(d1.doubleNum(2));    // 4
        System.out.println(d1.sum(2, 2));   // 6   
        System.out.println(d2.doubleNum(3));    // 9
        System.out.println(d2.sum(3, 3));   // 12
        System.out.println(d3.doubleNum(4));    // 8
        System.out.println(d3.sum(4, 4));   // 12
    }
}
原文地址:https://www.cnblogs.com/yangshixiong/p/12898707.html